牛客周赛 Round 48 C题小红的01串取反 题型:字符串

168 阅读1分钟

ac.nowcoder.com/acm/contest…

思想

我们先将两个字符串转化为整数数组aa,bb.然后我们通过^操作,对 aa[i]和aa[i+1]进行操作.我们把操作过程存储到vector里

操作完之后我们判断aa和bb是否相等.如果相等的话说明经过我们的操作变两个字符串变为相等的了,这个时候输出vector里面存储的过程步骤.

否则的话说明aa和bb不能变成一样的,输出-1即可.

code

#include<bits/stdc++.h>

using namespace std;
typedef pair<int,int>  PII;
int main()
{
	cin.tie(nullptr)->sync_with_stdio(false);
	
	int n;cin>>n;
    string a;cin>>a;
    string b;cin>>b;
    
    vector<int> aa(n);
    for(int i=0;i<n;i++)
    {
    	aa[i]=a[i]-'0';
	}
	vector<int>bb(n);
	for(int i=0;i<n;i++)
	{
		bb[i]=b[i]-'0';
	}
	
	vector<PII> ans;
	for(int i=0;i+1<n;i++)
	{
		if(aa[i]!=bb[i])
		{
		  aa[i]^=1;
		  aa[i+1]^=1;
		  ans.push_back({i,i+1}); 
		}
	}
	if(aa==bb)
	{
		cout<<ans.size()<<endl;
		for(auto [x,y]:ans)
		{
			cout<<x+1<<" "<<y+1<<endl;
		}
	}
	else cout<<-1<<endl;
	return  0;
}

image.png