how D
  • 板块学术版
  • 楼主Forever1507
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/3/1 00:35
  • 上次更新2023/10/23 23:28:22
查看原帖
how D
359614
Forever1507楼主2023/3/1 00:35

贪心调了一年。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t,n,k,x,a[200005],sum[200005],mini[200005];
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>t;
    while(t--){
        cin>>n>>k>>x;
        if(x<0){
            x=-x;
            k=n-k;
        }
        // mini[0]=1e18;
        for(int i=1;i<=n;++i){
            cin>>a[i];
            mini[i]=1e18;
            sum[i]=sum[i-1]+a[i]-x;
            mini[i]=min(mini[i-1],sum[i]);
        }
        int maxn=0;
        for(int i=1;i<=n-k;++i){
            for(int j=0;j<=min(i,k);++j){
                // cout<<"Check: "<<i<<' '<<j<<' '<<sum[i]<<' '<<mini[i-j]<<' '<<sum[i]+2*j*x-mini[i-j]<<'\n';
                maxn=max(maxn,sum[i]+2*j*x-mini[i-j]);
            }
        }
        for(int i=n-k+1;i<=n;++i){
            for(int j=k-(n-i);j<=min(i,k);++j){
                // cout<<"Check: "<<i<<' '<<j<<' '<<sum[i]<<' '<<mini[i-j]<<' '<<sum[i]+2*j*x-mini[i-j]<<'\n';
                maxn=max(maxn,sum[i]+2*j*x-mini[i-j]);
            }
        }
        cout<<maxn<<'\n';
    }
}
2023/3/1 00:35
加载中...