学习笔记-2021.2.2

今天做了一道题,记录一下

题目链接

本人当时写的代码如下:

#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;
}

写下这篇文章警戒一下自己,希望以后能更周全地考虑问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值