题目:有n的任务需要完成,初始进度是v, 第一次加v/k , 第二次加 v/(kk), 第三次加 v/(kk*k), 求 完成进度的最小v
思路:二分v,找到满足条件的最小的v,所谓满足的条件另外写一个函数再来判断。
代码:
#include <bits/stdc++.h>
using namespace std;
int n,k;
int cal(int v,int k)
{
int sum=0;
while(v)
{
sum+=v;
v/=k;
}
return sum;
}
int main()
{
cin>>n>>k;
int ans=n+1;
int l=1,r=n;
while(l<=r){
int mid=(l+r)/2;
if(cal(mid,k)>=n){
r=mid-1;
ans=min(ans,mid);
}
else{
l=mid+1;
}
}
cout<<ans<<endl;
}