CodeForces

来源:互联网 发布:linux python退出程序 编辑:程序博客网 时间:2024/05/16 14:07

题意:给你两个整数字N,K。N表示有个人要写N行东西,K是跟他的写东西效率有关的一个系数。这个人写东西写一会就累了就必须喝杯茶再写,他的效率会越来越低。需要求一个V值,V表示他依次能写等等,当这个值为零时他就睡着了。问你V最小为多少时,他才能写完这N行东西?

思路:二分一个V值,求出当前情况下可以写的行数sum如果小于N就继续二分大于V的部分,如果大于N就继续二分不大于V的部分,看V是否能够更小,如果等于V就跳出。

#include<bits/stdc++.h>using namespace std;int n,k;int check(int v){long long t = k,sum = v;while(t <= n){sum += v / t;t *= k;}return sum;}int main(){while(~scanf("%d%d",&n,&k)){int l = 1,r = n,m = l + (r - l) / 2;while(l < r){if(check(m) < n) l = m + 1;else r = m;m = l + (r - l) / 2;}printf("%d\n",m);}return 0;}




原创粉丝点击