提交时间:2021-05-15 17:14:06
运行 ID: 19388
#include<bits/stdc++.h> using namespace std; int a[1010],r[1010]; int n,ans,tot; void init() { cin>>n>>r[1]; for(int i=1;i<=n;++i){ a[i]=r[i]%10; r[i+1]=(r[i]*6807+2831)%201701; } } int check(int x) { int max1=0,max2=0,minn; for(int i=1;i<=x-1;++i) max1=max(max1,a[i]); for(int i=x+1;i<=n;++i) max2=max(max2,a[i]); minn=min(max1,max2); if(minn>a[x])return minn-a[x]; else return 0; } int main() { init(); for(int i=2;i<=n-1;++i){ ans+=check(i); } cout<<ans; return 0; } 方法三:O(n) #include<bits/stdc++.h> using namespace std; int a[1010],r[1010],dp[110][110]; int n,ans,tot,ma; void init() { cin>>n>>r[1]; for(int i=1;i<=n;++i){ a[i]=r[i]%10; r[i+1]=(r[i]*6807+2831)%201701; } } void pre() { ma=a[1]; for(int i=2;i<=n;++i){ le[i]=ma; ma=max(ma,a[i]); } ma=a[n]; for(int i=n-1;i>=1;--i){ ri[i]=ma; ma=max(ma,a[i]); } } int main() { init(); pre(); for(int i=2;i<=n-1;++i){ ma=min(le[i],ri[i]); if(ma>a[i])ans+=(ma-a[i]); } cout<<ans; return 0; }