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

版权声明:本文为m0_51780913原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。