codeforces 165B(Burning Midnight Oil)

【题意描述】

本题就是给定代码任务为n行,起始代码书写能力为v行,然后每经过一次除以k,当v变为0时看是否完成代码任务n?并求出最小的v。

【解题思路】

我们可以对v值进行二分,然后确定最后的v值。

【AC代码】

 1 #include<iostream>
 2 using namespace std;
 3 int ok(int v,int k)
 4 {
 5    int sum=v;
 6    while(v!=0)
 7    {
 8        sum+=v/k;
 9        v/=k;
10    }
11    return sum;
12 }
13 int main()
14 {
15     int n,k;
16     while(cin>>n>>k)
17     {
18        int up,low,ans=1;
19        if(n>k)
20        {
21         up=n;low=1;
22         while(low<=up) 
23         {
24            int mid=(up+low)/2;
25            int num=ok(mid,k);
26            if(num>=n) {up=mid-1;ans=mid;}
27            else low=mid+1;  
28         }   
29        }
30        else 
31        {
32          up=k;low=1;
33           while(low<=up) 
34         {
35            int mid=(up+low)/2;
36            int num=ok(mid,k);
37            if(num>=n) {up=mid-1;ans=mid;}
38            else low=mid+1;  
39         }    
40        }
41        
42         cout<<ans<<endl;
43     }
44     return 0;
45 }

 

posted @ 2014-08-06 20:52  future_hero  阅读(278)  评论(0编辑  收藏  举报