Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
98122 CSYZHunagKR 早凉与序列4 C++ 解答错误 60 55 MS 4944 KB 1124 2023-08-14 12:20:33

Tests(55/57):


#include<bits/stdc++.h> using namespace std; #define ll long long const int N=2e5+10; ll n,k,x,a[N],s[N],f[N],ans,p; inline void read(ll &x){ x=0;bool f=0;char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=1;c=getchar();} while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar(); if(f)x=-x; } int main(){ // freopen("B.in","r",stdin); read(n);read(k);read(x); if(x<0){ k=n-k; x=-x; } for(int i=1;i<=n;i++){ read(a[i]); s[i]=s[i-1]+a[i]; } for(int i=1;i<=n;i++) f[i]=-9999999999999; if(n<=5e3){ for(int l=1;l<=n;l++) for(int r=l;r<=n;r++) f[r-l+1]=max(f[r-l+1],s[r]-s[l-1]); for(int i=1;i<=k;i++){ if(f[i]+i*x>ans)p=i; ans=max(ans,f[i]+i*x); } for(int i=k+1;i<=n;i++){ if(f[i]+(2*k-i)*x>ans)p=i; ans=max(ans,f[i]+(2*k-i)*x); } cout<<ans; return 0; } ll l=max((ll)0,k-200),r=min(n,k+200); for(int len=l;len<=r;len++){ f[len]=s[len]; for(int i=len+1;i<=n;i++){ f[len]=max(f[len],s[i]-s[i-len]); } } for(int i=l;i<=k;i++)ans=max(ans,f[i]+i*x); for(int i=r;i<=n;i++)ans=max(ans,f[i]+(2*k-i)*x); cout<<ans; return 0; }


测评信息: