[HEOI2014]南园满地堆轻絮

分析

出现了最大值最小这类关键字,一般要考虑二分答案。但首先我们必须考虑答案是否具有单调性。先钦定一个答案 。那么 。如果我们把绝对值符号拆开,这是由两个一次函数构成的,那么对于 。仍满足上式。所以这个是满足单调性的。考虑二分答案,只有两个限制需要考虑。 。当没法同时满足两个条件时,返回

代码

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 5000010;
LL n,Sa,Sb,Sc,Sd,mod;
LL A[N],B[N],F[N];
LL f(LL x) {
    return (1LL*Sa*x%mod*x%mod*x%mod+Sb*x%mod*x%mod+Sc*x%mod+Sd)%mod;
}
bool check(LL d) {
    memcpy(B,A,sizeof(B));
    B[1] = max(1LL,A[1]-d);
    for(int i = 2;i <= n;i++) {
        B[i] = max(B[i-1],A[i]-d);
        if(fabs(A[i]-B[i]) > d) return 0;
    }
    return 1;
}
int main() {
    A[0] = 0;
    scanf("%lld%lld%lld%lld%lld%lld%lld",&n,&Sa,&Sb,&Sc,&Sd,&A[1],&mod);
    A[1] %= mod;
    for(int i = 2;i <= n;i++) A[i] = (f(A[i-1]) + f(A[i-2]))%mod;
    LL r = mod+100,l = 0,ans = mod+100;
    while(l <= r) {
        LL mid = r+l >> 1;
        if(check(mid)) {
            ans = min(mid,ans);r = mid - 1;
        }
        else l = mid + 1;
    }
    cout << ans << endl;
    return 0;
}
全部评论

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务