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 }