CF1399D Binary String To Subsequences
思路:
先定义a、b队列,分别表示0结尾和1结尾的,如果进来一个0,先判断b队列是否为空,非空则将b队列队首元素移到a队列,将该元素存入序号数组,空则计数器+1,在a队列内加入与cnt相等的元素,将cnt存入序号数组,进来1则反之。
代码:
#include<bits/stdc++.h>
using namespace std;
int t,cnt,n,i,l,x[200001];
string s;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
queue<int>a,b;
cnt=0;
cin>>n>>s;
for(i=0;i<n;i++){
if(s[i]=='0'){
if(b.empty()){
cnt++;
x[i]=cnt;
a.push(cnt);
}
else{
x[i]=b.front();
b.pop();
a.push(x[i]);
}
}
else{
if(a.empty()){
cnt++;
x[i]=cnt;
b.push(cnt);
}
else{
x[i]=a.front();
a.pop();
b.push(x[i]);
}
}
}
cout<<cnt<<endl;
for(i=0;i<n;i++)
cout<<x[i]<<' ';
cout<<endl;
}
return 0;
}