【算法讲解】模拟算法介绍和题目推荐
1.模拟简介
在现实生活中,计算机很难直接去解决实际问题,但是如果把实际问题建模成数学问题,就会大大地方便计算机来“理解”和“解决”。
有一些题目并不需要太复杂的思路,而只要根据题目的介绍,根据一定的时间,逻辑顺序模拟题目的“指令”就行了。但这类题目有时会有大量的细节需要注意。所以完成模拟题时,需要有足够的耐心。
2.各种类型的模拟
2.1.直接模拟题
这类模拟题大多没有什么含金量,直接根据题目给的规则模拟就行了。只需要多注意细节即可。
· 洛谷
P1042[NOIP2003 普及组] 乒乓球 ———— 戳这查看题目
· 洛谷P1328[NOIP2014 提高组] 生活大爆炸版石头剪刀布 ———— 戳这查看题目
· 洛谷P1067[NOIP2009 普及组] 多项式输出 ———— 戳这查看题目
· 洛谷P1786帮贡排序 ———— 戳这查看题目
2.2.走迷宫/坐标偏移
这类模拟题大多涉及到坐标的变化,实际难度也不高。在处理坐标时,有两个小技巧:
- 使用数组存储坐标偏移量。
int p[][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; // 上下左右
int dx[] = {0, 0, -1, 1}; // 和上面等效的写法
int dy[] = {-1 , 1, 0, 0};
int p[][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {-1, -1}, {1, -1}, {-1, 1}, {1, 1}}; // 上下左右,上左,上右,下左,下右
int dx[] = {0, 0, -1, 1, -1, 1, -1, 1}; // 和上面等效的写法
int dy[] = {-1 , 1, 0, 0, -1, -1, 1, 1};
- 将存储
地图的数组设置为全局变量,这样可以尽量避免判断边界问题。如果需要判断边界,可以这么做:(以四个方向,地图长n,宽m为例)
for (int i = 0; i < 4; i++){
int px = dx[i] + nowx, py = dy[i] + nowy;
if (px >= 1 && px <= n && py <= 1 && py >= m/*其它判断条件,例如没有走过*/){
// 执行语句
}
}
· 洛谷
P2670[NOIP2015 普及组] 扫雷游戏 ———— 戳这查看题目
· 洛谷P1086[NOIP2004 普及组] 花生采摘 ———— 戳这查看题目
· 洛谷P1518[USACO2.4] 两只塔姆沃斯牛 The Tamworth Two ———— 戳这查看题目
· 洛谷P11228[CSP-J 2024] 地图探险 ———— 戳这查看题目
2.3.字符串模拟
因为涉及到了字符串的处理,所以难度要偏高(其实也没高到哪去)。只需要熟练运用字符串相关函数即可。
· 洛谷
P1098[NOIP2007 提高组] 字符串的展开 ———— 戳这查看题目
· 洛谷P1079[NOIP2012 提高组] Vigenère 密码 ———— 戳这查看题目
· 洛谷B3843[GESP202306 三级] 密码合规 ———— 戳这查看题目
2.4.找规律型模拟
这种类型的题就有点难了,可以画图以加深理解,找到规律。
· 洛谷
P1563[NOIP2016 提高组] 玩具谜题 ———— 戳这查看题目
· 洛谷P4924[1007] 魔法少女小Scarlet ———— 戳这查看题目
· 洛谷P1065[NOIP2006 提高组] 作业调度方案 ———— 戳这查看题目
· 洛谷P2239[NOIP2014 普及组] 螺旋矩阵 ———— 戳这查看题目
喜欢就订阅此专辑吧!
【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。
欢迎扫码关注蓝胖子编程教育

1265

被折叠的 条评论
为什么被折叠?



