Codeforces Round #661 (Div. 3)
Binary String To Subsequences
题意
01的无序串中,找到010101……或10101……的有序子串,并进行序号标记。
用栈没写出来,看了别人代码之后,vector写的,用栈应该也可以,还是太菜了。
#include<iostream>
#include<vector>
using namespace std;
int t,n,m[223456];
string s;
int main()
{
cin>>t;
while(t--){
cin>>n;
vector<int> ve[2],ans;
cin>>s;
int nat=1;
for(int i=0;i<n;i++){
int x=s[i]-'0';
if(ve[x].empty()) ve[x].push_back(nat),nat++;//排序
ans.push_back(ve[x].back());//把这个序号标记在ans数组中
ve[!x].push_back(ve[x].back());//这个序接下来是相反的字符
ve[x].pop_back();
}
cout<<nat-1<<endl;
for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
cout<<endl;
}
return 0;
}
/*
5
4
0011
6
111111
5
10101
8
01010000
10
0101110010
*/