#include<iostream>
#include<vector>
#define N 100005
int arr[N];
int ans[2][N];
using namespace std;
bool solve(int len, int channel){
int left = 0, mid = channel, right=0;
for (int i = 0; i < len; i++){
ans[channel][i] = mid;
right = arr[i] - left - mid;
if (right < 0 || right>1)return false;
left = mid; mid = right;
}
if (right)return false;
return true;
}
int main(){
ios::sync_with_stdio(false);
int n;
cin >> n;
while (n--){
int len;
cin >> len;
for (int i = 0; i < len; i++){
cin >> arr[i];
}
vector<int> ones;
vector<int> zeros;
int flag1=solve(len, 0);
int flag2=solve(len, 1);
int cnt1 = 0, cnt2 = 0;
int ch = flag1 ? 0 : 1;
for (int i = 0; i < len; i++){
if(ans[0][i] == ans[1][i] || !flag1 || !flag2){
if (ans[ch][i])cnt1++, ones.push_back(i + 1);
else cnt2++, zeros.push_back(i + 1);
}
}
cout << cnt1;
for (auto i : ones)cout<<' ' << i ;
cout << endl;
cout << cnt2;
for (auto i : zeros)cout << ' '<< i ;
cout << endl;
}
return 0;
}
hihocoder #1114 : 小Hi小Ho的惊天大作战:扫雷·一代码比较简单易懂,直接贴出来了。#include<iostream>#include<vector>#define N 100005int arr[N];int ans[2][N];using namespace std;bool solve(int len, int channel){ int left =