CF1399D Binary String To Subsequences

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_52536621/article/details/113921072