D. Equal Binary Subsequences(構造)
顯然0、1的個數都為偶數,因為要分成兩個相等子序列。
考慮連續兩兩一組,存在這樣一種構造方式,就是通過題面給定操作讓每組元素都相等即可構造成功子序列
我們找出所有的這樣的組,然後分别選擇每組的
假設不同對的個數為x個,那麼相同的對數為n-x個,設相同的對數中1為y個。
那麼1的個數: 必須偶數,是以為偶數。
這樣我們操作(0,1,0,1) 最後就都會變換成相同的組。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
void solve(){
ll n; cin>>n;
string s; cin>>s;
ll freq=0;
vector<ll> ans;
ll need=0;
for(ll i=0;i<2*n;i+=2){
if(s[i]!=s[i+1]){
freq++;
ans.push_back(i+1);
if(s[i]-'0'!=need){
ans.back()++;
}
need^=1;
}
}
if(freq&1){
cout<<"-1\n";
return;
}
cout<<ans.size()<<" ";
for(auto it:ans){
cout<<it<<" ";
}
cout<<"\n";
for(ll i=1;i<=2*n;i+=2){
cout<<i<<" \n"[i+1==2*n];
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t; cin>>t;
while(t--){
solve();
}
}