1. 程式人生 > >B - Burning Midnight Oil CodeForces - 165B

B - Burning Midnight Oil CodeForces - 165B

tel left total read work examples CI eight can

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 技術分享圖片

lines and so on: 技術分享圖片, 技術分享圖片, 技術分享圖片, ...

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

can take to let him write not less than n lines of code before he falls asleep.

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

that lets Vasya write the program in one night.

Examples

Input
7 2
Output
4
Input
59 9
Output
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