Codeforces 689C. Mike and Chocolate Thieves(二分)

题目链接:http://codeforces.com/contest/689/problem/C

题意:说实话,这个题的意思我愣了看了十多遍没看懂,最后还是看的别人的题解明白的。

       意思就是:有4个贼,他们共用一个容量为n的背包,他们偷的东西量为等比数列,即a*k,a*k*k,a*k*k*k,给出等比数列可能的组合数m,问n的为多少。

引用博文:https://blog.csdn.net/baidu_19306071/article/details/51918518?utm_source=blogxgwz0

自己的AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long  check(long long  x)
{
	long long cnt=0;
	for( long long i=2;(i*i*i)<=x;i++)//用pow会出错,我暂时也不知道为什么
	{
		cnt+= x/(i*i*i); 
	}
	return cnt;
}
int main()
{
	long long m;
	scanf("%lld",&m);
	long long  l=0,r=1e18;//一个范围很广的二分
	while(l<r)
	{
		long long mid=(l+r)>>1;
	//	cout<<mid<<endl;
		if(check(mid)<m)
		l=mid+1;
		else r=mid;
	}
	//cout<<l<<endl;
	if(check(l)==m) cout<<l<<endl;
	else cout<<"-1"<<endl;
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/zvenWang/article/details/83386445