hihocoder-1498-Diligent Robots

hihocoder-1498-Diligent Robots

 

#1498 : Diligent Robots

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

There are N jobs to be finished. It takes a robot 1 hour to finish one job.

At the beginning you have only one robot. Luckily a robot may build more robots identical to itself. It takes a robot Q hours to build another robot.  

So what is the minimum number of hours to finish N jobs?

Note two or more robots working on the same job or building the same robot won't accelerate the progress.

输入

The first line contains 2 integers, N and Q.  

For 70% of the data, 1 <= N <= 1000000  

For 100% of the data, 1 <= N <= 1000000000000, 1 <= Q <= 1000

输出

The minimum number of hours.

样例输入
10 1
样例输出
5

 

 

 

题解:

  使用贪心算法的思想。

  样本复制之后需要去生产才有效,所以机器人必定是先复制完。

  还有一个想法是是否需要一边复制一边生产,这个想法是否定的,假如n生产m复制,得到的是 m + (q+1)*n.  如果是一起复制,则得到的是 (m + n)*q , 大于前者。

 

 

#include <cstdio> 
#include <cstdlib> 

int main()
{
    int q; 
    long long cnt, n, k; 
    while(scanf("%lld %d", &n, &q) != EOF)
    {
        cnt = 0; 
        k = 1; 
        while(2*q*k < n)
        {
            k *= 2; 
            cnt += q; 
        }
        cnt += n / k; 
        if(n%k != 0)
        {
            cnt += 1; 
        }
        printf("%lld\n", cnt );
    }
    return 0; 
}

  

 

posted @ 2019-06-14 20:40  zhang--yd  阅读(116)  评论(0编辑  收藏  举报