1. 程式人生 > >Codeforces 689C. Mike and Chocolate Thieves(二分)

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;
 }