题目链接: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;
}