1 条题解

  • 1
    @ 2026-6-12 20:10:28

    这道题我觉得真的不难,但是题目中说是niop的题(不知道为什么)

    给大家一个结论(其实这道题不用DP)

    看我的代码: (注释写在里边了)

    #include<bits/stdc++.h>
    #define int long long//懒得写long long
    using namespace std;
    vector<int> r(1);//由于不知道n所以我用了vector
    vector<int> mxl;
    vector<int> mxr;
    int ans;
    int n,x;
    signed main(){
    	scanf("%lld%lld",&n,&x);
    	r.push_back(x%10);
    	for(int i=2;i<=n;i++){
    		x=(x*6807+2831)%201701;
    		r.push_back(x%10);
    	}
    	mxl.assign(n+1,0);
    	mxr.assign(n+1,0);
    	mxl[1]=r[1];
    	for(int i=2;i<=n;i++){
    		mxl[i]=max(mxl[i-1],r[i]);
    	}
    	mxr[n]=r[n];
    	for(int i=n-1;i>=1;i--){
    		mxr[i]=max(mxr[i+1],r[i]);
    	}
        //预处理左边最大值和右边最大值
    	for(int i=1;i<=n;i++){
    		int h=min(mxl[i],mxr[i]);//计算这个坑里最多盛水的高度
    		if(h>r[i]){
    			ans+=h-r[i];//如果<r[i],那么盛不下水
    		}
    	}
    	printf("%lld",ans);//输出答案即可
    	return 0;//完结撒花🎉
    }
    

    信息

    ID
    5149
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者