WIKIOI
wiki(I:)
比赛相关
工具软件
语言基础
算法基础
搜索
动态规划
字符串
数学
数据结构
图论
计算几何
杂项
专题
算法基础简介
枚举
模拟
递归 & 分治
贪心
排序简介
选择排序
冒泡排序
插入排序
计数排序
基数排序
快速排序
归并排序
堆排序
桶排序
希尔排序
锦标赛排序
排序相关 STL
排序应用
前缀和 & 差分
二分
倍增
22 objects
本站非官方,所收集资源均来源于网络。
模拟 - 算法基础
本页面将简要介绍模拟算法。 ## 简介 模拟就是用计算机来模拟题目中要求的操作。 模拟题目通常具有码量大、操作多、思路繁复的特点。由于它码量大,经常会出现难以查错的情况,如果在考试中写错是相当浪费时间的。 ## 技巧 写模拟题时,遵循以下的建议有可能会提升做题速度: - 在动手写代码之前,在草纸上尽可能地写好要实现的流程。 - 在代码中,尽量把每个部分模块化,写成函数、结构体或类。 - 对于一些可能重复用到的概念,可以统一转化,方便处理:如,某题给你 "YY-MM-DD 时:分" 把它抽取到一个函数,处理成秒,会减少概念混淆。 - 调试时分块调试。模块化的好处就是可以方便的单独调某一部分。 - 写代码的时候一定要思路清晰,不要想到什么写什么,要按照落在纸上的步骤写。 实际上,上述步骤在解决其它类型的题目时也是很有帮助的。 ## 例题详解 ### " [Climbing Worm - HDU](http://acm.hdu.edu.cn/showproblem.php?pid=1049)" > 一只一英寸的蠕虫位于 n 英寸深的井的底部。它每分钟向上爬 u 英寸,但是必须休息一分钟才能再次向上爬。在休息的时候,它滑落了 d 英寸。之后它将重复向上爬和休息的过程。蠕虫爬出井口花费了多长时间?我们将不足一分钟的部分算作一整分钟。如果蠕虫爬完后刚好到达井的顶部,我们也设作蠕虫已经爬出井口。 ### "解题思路" > 直接使用程序模拟蠕虫爬井的过程就可以了。用一个循环重复蠕虫的爬井过程,当攀爬的长度超过或者等于井的深度时跳出。注意上爬和下滑时都要递增时间。 ### "参考代码" ```cpp #include
int main(void) { int n = 0, u = 0, d = 0; while (scanf("%d %d %d", &n, &u, &d) && n != 0) { int time = 0, dist = 0; while (true) { dist += u; time++; if (dist >= n) break; dist -= d; time++; } printf("%d\n", time); } return 0; } ``` ## 习题 - [【NOIP2014】生活大爆炸版石头剪刀布 - Universal Online Judge](https://uoj.ac/problem/15) - [3750: 魔兽世界 - OpenJudge](http://bailian.openjudge.cn/practice/3750/) - [「SDOI2010」猪国杀 - LibreOJ](https://loj.ac/problem/2885)