1 条题解
-
1
这道题我觉得真的不难,但是题目中说是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
- 上传者