codeForces 165B.Burning Midnight Oil(二分)

题意:给你两个整数字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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值