B - Burning Midnight Oil CodeForces - 165B
One day a highly important task was commissioned to Vasya — writing a program in a night. The program consists of n lines of code. Vasya is already exhausted, so he works like that: first he writes v lines of code, drinks a cup of tea, then he writes as much as lines, drinks another cup of tea, then he writes
The expression is regarded as the integral part from dividing number a by number b.
The moment the current value equals 0, Vasya immediately falls asleep and he wakes up only in the morning, when the program should already be finished.
Vasya is wondering, what minimum allowable value v
Input
The input consists of two integers n and k, separated by spaces — the size of the program in lines and the productivity reduction coefficient, 1?≤?n?≤?109, 2?≤?k?≤?10.
Output
Print the only integer — the minimum value of v
Examples
Input7 2Output
4Input
59 9Output
54
Note
In the first sample the answer is v?=?4. Vasya writes the code in the following portions: first 4 lines, then 2, then 1, and then Vasya falls asleep. Thus, he manages to write 4?+?2?+?1?=?7 lines in a night and complete the task.
In the second sample the answer is v?=?54. Vasya writes the code in the following portions: 54, 6. The total sum is 54?+?6?=?60, that‘s even more than n?=?59.
題解:找到一個合適的值V,
【一天,一個非常重要的任務被委托給Vasya--在一個晚上寫一個程序。該程序由n行代碼組成。Vasya已經耗盡,所以,他的作品就像是:第一,他寫道v行代碼,喝一杯茶,然後他盡可能多寫為線,飲料一杯茶,然後他寫道線等:,,, ...
該表達式被視為從數字a除以數字b組成的組成部分。
當前值等於0 的那一刻,Vasya立即睡著了,他只在早上才醒來,當時程序應該已經完成??。
Vasya很納悶,有什麽最小允許值v可以讓他寫不低於比ň行代碼,他睡著了。】
【題析】:需要用二分查找
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() { 5 long long n; 6 int m; 7 scanf("%lld %d",&n,&m); 8 long long v; 9 int flag = 0; 10 long long vv; 11 long long mid; 12 long long left = 0; 13 long long right = n; 14 long long ans = n; 15 while(left <= right) { 16 mid = (left + right) / 2; 17 //printf("%lld %lld %lld\n",left,right,mid); 18 long long sum = mid; 19 int count = 0; 20 long long v = m; 21 int vv = mid/v; 22 while(vv){ 23 sum += vv; 24 count++; 25 v = v*m; 26 vv = mid/v; 27 } 28 if(flag == 1) break; 29 if(sum >= n) { 30 31 ans = min(ans,mid); 32 right = mid - 1; 33 ans = min(ans,mid); 34 } else { 35 left = mid + 1; 36 } 37 } 38 printf("%lld\n",ans); 39 return 0; 40 }
B - Burning Midnight Oil CodeForces - 165B