原题链接
题解
1.当10个数不一致时,无论怎样都不成立
2.当01个数一致时,是否一定存在某种方法使得成立呢?
3.对于长度为 \(k\) 的字符串 \(s\),若不合法,那我在旁边添加一个01,则我们可以连续删除两边的配对数字,且至少能删除一对,且经过若干轮的删除一定能使字符串长度减小
总的来说,我们把插入若干个01串使得对称的过程,看成插入若干个01串,使得两端对称的部分消除
code
#include<bits/stdc++.h>
using namespace std;int main()
{int t;cin>>t;while(t--){int n;cin>>n;string s;cin>>s;deque<int> q,id;int cnt=0;for(int i=0;s[i];i++){q.push_back(s[i]-'0');cnt+=q.back();id.push_back(i);}id.push_back(n);if(cnt*2!=n){puts("-1");continue;}queue<int> ans;int l=0,r=n;//代表当前插入的位置while(q.size()>1){if(q.front()==q.back()){if(q.back()==0){q.pop_front();l++;ans.push(r);q.push_back(0);r++;}else{q.pop_back();r++;ans.push(l);q.push_front(1);l++;}}else{q.pop_back();q.pop_front();l++;r--;}}cout<<ans.size()<<endl;while(ans.size()){cout<<ans.front()<<" ";ans.pop();}puts("");}return 0;
}