ACM算法精华总结 算法从入门到放弃系列笔记
Study Date :2020-01-20
1.算法思想
模拟即用程序来模拟题目中的操作,从而求解问题答案的思路。
2.解题要点
通常这类题目代码量大、操作多、思路繁复,因此要避免反复验证操作逻辑的正确性,浪费比赛时间。为了避免,可以从以下几点入手:
- 动手前,在草稿纸上落实解题实现思路和流程。
- 代码模块化,方便排错和调试
- 对问题中需要转化变量进行同一,如将"YY-MM-DD"转化为毫秒值。
3.例题
一只一英寸的蠕虫位于 n 英寸深的井的底部。它每分钟向上爬 u 英寸,但是必须休息一分钟才能再次向上爬。在休息的时候,它滑落了 d 英寸。之后它将重复向上爬和休息的过程。蠕虫爬出井口花费了多长时间?我们将不足一分钟的部分算作一整分钟。如果蠕虫爬完后刚好到达井的顶部,我们也设作蠕虫已经爬出井口。
解题思路
直接使用程序模拟蠕虫爬井的过程就可以了。用一个循环重复蠕虫的爬井过程,当攀爬的长度超过或者等于井的深度时跳出。注意上爬和下滑时都要递增时间。
if (d>=u){
throw new RuntimeException("该蠕虫无法爬出去,再努力点吧!");
}
int time=0,distance = 0;
// 爬行
time++;
distance+=u;
while(distance >= n){
// 休息时滑落
time++;
distance-=d;
// 爬行
time++;
distance+=u;
}