社区讨论
How C
学术版参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhz43kfx
- 此快照首次捕获于
- 2025/11/15 01:08 3 个月前
- 此快照最后确认于
- 2025/11/16 13:40 3 个月前
大致思路是前缀和处理+拆柿子,最后分别求前后缀 max,一直 Wrong answer on test 6。
CPP#include <bits/stdc++.h>
using namespace std;
const int N=3e5+10;
#define ll long long
ll n,a[N],pre[N],suf[N][3],ans;
void solve(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],pre[i]=pre[i-1]+a[i];
for(int i=1;i<=n;i++){
suf[i][1]=i-i*i+pre[i-1];
suf[i][2]=i*i+i-pre[i];
}
for(int i=2;i<=n;i++) suf[i][1]=max(suf[i][1],suf[i-1][1]);
for(int i=n-1;i>=1;i--) suf[i][2]=max(suf[i][2],suf[i+1][2]);
ans=pre[n];
for(int i=1;i<=n;i++){
ans=max(ans,pre[n]+suf[i][1]+suf[i][2]);
}
cout<<max(ans,pre[n])<<'\n';
for(int i=0;i<=n+10;i++){
pre[i]=0;
suf[i][1]=0;
suf[i][2]=0;
}
ans=0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
ll __;
cin>>__;
while(__--) solve();
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...