【ACM】紙牌搭建
阿新 • • 發佈:2018-11-08
【題目】現有N張撲克牌,最多可以搭建幾層
【題目分析】找到通項公式 f[ i ]=f[ i-1 ]+3*i-1。先打出表,再二分搜尋。不斷縮小範圍。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; long long n; long long a[900005]; int main () { long long ans,i; a[0]=0; for(i=0;i<=900000;i++) { ans+=(3*i-1); a[i]=ans; } while(scanf("%lld",&n)!=EOF) { int l=0,r=900000,mid,t=100; while(t--) { mid=(l+r)/2; if(a[mid]<=n && n<a[mid+1]) { ans=mid; break; } if(a[mid]>n) { r=mid; } else { l=mid; } } cout<<ans<<endl; } return 0; }