Codeforces 201E Thoroughly Bureaucratic Organization (智商题。。)

#include <iostream>  
#include <cstdio>  
#include <cstring>  
#include <cmath>  
#include <algorithm>  
#include <queue>  
#include <set>  
#include <ctime>  
#include <cstdlib>  
using namespace std;  


#define inf 0x3f3f3f3f
#define N 10000020
#define M 1000020
#define LL long long
#define mod 1000000007
#define ls (i << 1)
#define rs (ls | 1)
#define md (ll + rr >> 1)
#define lson ll, md, ls
#define rson md + 1, rr, rs
#define B 350


int n, m;

int qpow(int x, int k) {
	int ret = 1;
	while(k) {
		if(k & 1) ret = 1LL * ret * x % mod;
		k >>= 1;
		x = 1LL * x * x % mod;
	}
	return ret;
}
bool check(int k) {
	if(n == 1) return 1;
	LL sum = 1, t = 1LL * k * m;
	double c = 1;
	LL s = 1;
	for(int i = 1; i <= k; ++i) {
		LL x = t / i, y = mod;
		if(x == 0) return 0;
		c = c * (k - i + 1) / i;
		s = s * (k - i + 1) % mod * qpow(i, mod - 2) % mod;
		if(c < mod) y = s;
		x = min(x, y);
		sum += x;
		if(sum >= n) return 1;
		t -= x * i;
	}
	return 0;
}


		



int main() {
	int cas;
	scanf("%d", &cas);
	while(cas--) {
		scanf("%d%d", &n, &m);
		int l = 0, r = n;
		while(l < r) {
			int mid = (l + r) / 2;
			if(check(mid)) r = mid;
			else l = mid + 1;
		}
		printf("%d\n", l);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值