题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1049
题目描述:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9278 Accepted Submission(s): 6052
10 2 1 20 3 1 0 0 0
17 19
题意:
墙高n,虫的速度是u,虫爬一分钟要休息一分钟,在休息的一分钟里虫下降d。问给出n,u,d,求出虫到达n高度的最短分钟数。
题解:这里将爬一分钟和休息一分钟合并成一个动作,这样的一个动作就是一个周期。这里最短指的是虫第一次到达这个高度,而接下来肯定是休息时间,这样肯定要用周期来无限接近于n-u,然后虫子下一分钟的上爬u就刚好到达n的高度,所以抽象成这样的表达式t=(n-u)/(u-d),(u-d)就是虫子一个周期内上爬的高度,这里如果t*(u-d)<(n-u)的话要让t++。即使整数t歌周期必须要>=(n-u).然后再往上爬一分钟就到了n的高度。由于一个周期是两分钟这样答案就是2*t+1。
代码:
/* acm hdu:Climbing Worm */ #include<stdio.h> #include<stdlib.h> int n=0,u=0,d=0,t=0; int ans=0; /*for test*/ int test() { return(0); } /*main process*/ int MainProc() { while(scanf("%d%d%d",&n,&u,&d)!=EOF&&n>0) { t=(n-u)/(u-d); if(t*(u-d)<n-u) { t++; } ans=t*2+1; printf("%d\n",ans); } return(0); } int main() { MainProc(); return(0); }