hihocoder 1498 Diligent Robots

模拟。

不断分裂,然后计算时间,取个最小值。我也不知道这做法对不对的,读完题猜了一下,抱着$WA$的心态$submit$了,然后跳出一个$AC$。

#include<bits/stdc++.h>
using namespace std;

long long n;
int q;

int main()
{
    scanf("%lld%d",&n,&q);

    long long now=1;
    long long ans=n;
    long long ci=0;

    while(1)
    {
        long long nd = n/now;
        if(n%now!=0) nd++;
        ans=min(ans,nd+q*ci);
        now=now*2;
        ci++;
        if(now>=n) break;
    }

    printf("%lld\n",ans);

    return 0;
}

 

posted @ 2017-04-08 21:38  Fighting_Heart  阅读(284)  评论(0编辑  收藏  举报