D. Equal Binary Subsequences
一道比较妙的构造题
我们只需要成对进行考虑即可,每一个成对的01和10反着操作即可
void solve(){
int cnt1=0;
cin>>n;
cin >> p;
p=" "+p;
n*=2;
vector<pii> vec;
for(int i=1;i<=n;i+=2){
if(p[i]!=p[i+1]){
if(p[i]=='1') vec.push_back({
i,i+1});
else vec.push_back({
i+1,i});
}
}
if(vec.size()&1) {
print(-1);
return ;
}
printf("%d ",vec.size());
for(int i=0;i<vec.size();++i){
if(i%2==0){
printf("%d ",vec[i].x);
}
else{
printf("%d ",vec[i].y );
}
}printf("\n");
for(int i=1;i<=n;++i){
if(i&1) printf("%d ",i);
}printf("\n");
}