题意:有四个贼偷糖,后面一个贼偷糖的数量是前一个贼的k倍,现在给你一个方案数m,求满足m种偷取方案数的最小总糖数n。
题意:假设有n颗糖,偷取的方案数为( n/(2^3)+n/(3^3)+....+n(k^3) )种(k^3<=n),二分查找最小的n。
#include <iostream> using namespace std; long long solve(long long x) { long long ans=0; for(long long k=2;;k++) { if(x/(k*k*k)==0) break; ans+=x/(k*k*k); } //cout<<ans<<endl; return ans; } int main() { long long m; cin>>m; bool ok=false; long long l=1; long long r=5000000000000000; long long ans; while(l<=r) { //cout<<l<<‘ ‘<<r<<endl; long long mid=(l+r)/2; long long cnt=solve(mid); if(cnt>m) r=mid-1; else if(cnt<m) l=mid+1; else { ans=mid; ok=true; r=mid-1; } } if(ok) cout<<ans<<endl; else cout<<-1<<endl; return 0; }
时间: 2024-10-10 01:35:56