| 比赛 |
2026.8.28 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
一周一次买下同班同学的那些事 |
最终得分 |
100 |
| 用户昵称 |
终焉折枝 |
运行时间 |
0.326 s |
| 代码语言 |
C++ |
内存使用 |
5.38 MiB |
| 提交时间 |
2026-08-28 09:36:49 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2 * 1e5 + 5;
int n;
int a[N];
vector<int> pos;
int pre[N];
int suf[N];
inline void solve(){
cin >> n;
vector<int>().swap(pos);
int mx = 0;
for(int i = 1;i <= n;i ++){
cin >> a[i];
mx += a[i];
pre[i] = pre[i - 1] + abs(a[i]);
if(a[i] > 0) pos.push_back(i);
}
suf[n + 1] = 0;
for(int i = n;i >= 1;i --){
suf[i] = suf[i + 1] + a[i];
}
int sum = mx;
int index = 0;
for(int x : pos){
if(pre[x - 1] - a[x] + suf[x + 1] > mx){
mx = pre[x - 1] - a[x] + suf[x + 1];
index = x;
}
// mx = max(, mx);
}
if(mx == sum){
cout << 0 << '\n' << '\n';
return;
}
bool flag = 1;
vector<int> ans;
for(int i = index - 1;i >= 1;i --){
if(a[i] > 0 && flag){
ans.push_back(i);
flag = 0;
}
else if(a[i] < 0 && !flag){
ans.push_back(i);
flag = 1;
}
}
// cout << mx << '\n';
cout << (int)ans.size() + 1 << '\n';
for(int x : ans) cout << x << ' ';
cout << index << '\n';
}
signed main(){
freopen("bought.in", "r", stdin);
freopen("bought.out", "w", stdout);
cin.tie(0) -> ios::sync_with_stdio(0);
int T; cin >> T;
while(T --) solve();
return 0;
}