Codeforces 689C. Mike and Chocolate Thieves(二分)
阿新 • • 發佈:2018-11-12
題目連結: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; }