HDU 1049 Climbing Worm(数学)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a17865569022/article/details/81941021

这里写图片描述
思路:我们可以求出每两分钟爬虫在井壁上上升的距离sub,还有要特殊注意的是最后一次爬升是不需要休息的,时间只要一分钟就行。
知道了每两分钟上升的距离,我们只需要推断出cnt次爬行,并且爬行总距离小于n的这个cnt次数。怎么推断呢?用n/sub得到一个整数,既然最后一次爬行特殊,不需休息,我们就用n/sub减去1,得到n/sub-1,用他乘以sub得到一个n/sub-1次爬行上升的总距离,n-(n/sub-1)*sub得到余下的差值a,找a(a<=u)最接近u的一个cnt(即n/sub-1),就是我们最终要的结果。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,u,d;
    while(cin>>n>>u>>d)
    {
        if(n==0&&u==0&&d==0)
            break;
        int cnt=0,sub=u-d;
        int i=n/sub-1;
        while(i>0)
        {
            int a=n-i*sub;
            if(a<=u)
                cnt=i;
            else
                break;
            i--;
        }
        cout<<cnt*2+1<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/a17865569022/article/details/81941021
今日推荐