D. Equal Binary Subsequences

D. Equal Binary Subsequences

一道比较妙的构造题
我们只需要成对进行考虑即可,每一个成对的01和10反着操作即可

void solve(){
    
    
	int cnt1=0;
	cin>>n;
	cin >> p;
	p=" "+p;
	n*=2;
	
	vector<pii> vec;
	for(int i=1;i<=n;i+=2){
    
    
		if(p[i]!=p[i+1]){
    
    
			if(p[i]=='1') vec.push_back({
    
    i,i+1});
			else vec.push_back({
    
    i+1,i});
		}
	}
	if(vec.size()&1) {
    
    
		print(-1);
		return ;
	}
	printf("%d ",vec.size());
	for(int i=0;i<vec.size();++i){
    
    
		if(i%2==0){
    
    
			printf("%d ",vec[i].x);
		}
		else{
    
    
			printf("%d ",vec[i].y );
		}
	}printf("\n");
	
	for(int i=1;i<=n;++i){
    
    
		if(i&1) printf("%d ",i);
	}printf("\n");
}

猜你喜欢

转载自blog.csdn.net/m0_51780913/article/details/127255592