今天做了一道题,记录一下
本人当时写的代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int v1,v2,t,s,l;
int len1=0,len2=0,time=0,f=0;
scanf("%d%d%d%d%d",&v1,&v2,&t,&s,&l);
while(len1<l&&len2<l) {
if(len1-len2>=t&&f==0) { //距离相等时休息s秒,注意不能连续休息,所以用f标记是否休息过
len2+=v2*s;
time+=s;
f=1;
} else {
len1+=v1;
len2+=v2;
time++;
f=0;
}
// printf("%d %d %d\n",len1,len2,time);
}
if(len1>=l&&len2<l)
printf("R\n");
else if(len1<l&&len2>=l)
printf("T\n");
else
printf("D\n");
printf("%d",time);
return 0;
}
结果提交上去只有82分,后来网上一顿乱搜,才发现问题所在:忽略了兔子在休息过程中乌龟抵达终点这一特殊情况
AC代码:
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int v1,v2,t,s,l;
int len1=0,len2=0,time=0,f=0;
scanf("%d%d%d%d%d",&v1,&v2,&t,&s,&l);
while(len1<l&&len2<l) {
if(len1-len2>=t&&f==0) { //距离相等时休息s秒,注意不能连续休息,所以用f标记是否休息过
len2+=v2*s;
time+=s;
f=1;
} else {
len1+=v1;
len2+=v2;
time++;
f=0;
}
// printf("%d %d %d\n",len1,len2,time);
}
if(len1>=l&&len2<l)
printf("R\n%d",time);
else if(len1<l&&len2>=l)
printf("T\n%d",l/v2);
//考虑一种特殊情况:兔子在休息过程中乌龟抵达终点,如果不管如何都输出time的话就会出现错误(因为第十行那个if)
//如 10 3 20 15 300
else
printf("D\n%d",time);
return 0;
}
写下这篇文章警戒一下自己,希望以后能更周全地考虑问题。