bzoj3613: [Heoi2014]南园满地堆轻絮 二分
这道题二分一下就可以了
虽然数据看起来过不了,但还是能过的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; inline int read(){ int x=0,f=1,ch= getchar (); while (ch< '0' ||ch> '9' ){ if (ch== '-' ){f=-1;}ch= getchar ();} while (ch>= '0' &&ch<= '9' ){x=x*10+ch- '0' ;ch= getchar ();} return x*f; } int n,sa,sb,sc,sd,mod; inline int calc( int x){ long long res=0; res+=( long long )sa*x%mod*x%mod*x%mod; res+=( long long )sb*x%mod*x%mod; res+=( long long )sc*x%mod; res+=sd; return res%mod; } int a[5000005]; inline bool ok( int x){ int id=a[1]-x,i,l,r; for (i=2;i<=n;i++){ l=a[i]-x;r=a[i]+x; if (id>r) return false ; id=max(id,l); } return true ; } int main(){ n=read(),sa=read(),sb=read(),sc=read(),sd=read(),a[1]=read(),mod=read(); a[1]%=mod;sa%=mod,sb%=mod,sc%=mod,sd%=mod; int i; for (i=2;i<=n;i++) a[i]=(calc(a[i-1])+calc(a[i-2]))%mod; int l=0,r=mod-1,mid; while (l<r){ mid=(l+r)>>1; if (ok(mid)) r=mid; else l=mid+1; } cout<<l<<endl; return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步