首页 > 代码库 > codeforces 165B(Burning Midnight Oil)

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 }