题解
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;
}
标签:01,int,Qingshan,back,pop,++,Loves,push,Strings
From: https://www.cnblogs.com/pure4knowledge/p/18282765