题目大意为:给定一个只包含0,1,2的字串x,要我们找2个同样只包含0,1,2的字串a,b使得每一位上存在(ai+bi)%3=ci,还要求a,b两者间最大的数最小。
解题思路:从第一位开始读x,若是2或0则a,b上对应的那位为a[i]=b[i]=x[i]/2;直到出现第一个1(这个1的位置决定了a,b间最大的数):假定我们要a为最大的数,则a[i]=1,b[i]=0。之后
即使把x上的数字全部给b串,a还是两者中最大的,但也同时满足a是最小的。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int t;
string x;
cin>>t;
while(t--)
{
int n,flag=0;
cin>>n>>x;
string a(n,'0'),b(n,'0');//新学的知识mark
for(int i=0;i<n;++i)
{
if(!flag)
{
if(x[i]=='2') a[i]=b[i]='1';
else if(x[i]=='1')
{
a[i]='1';
b[i]='0';
flag=1;
}
else a[i]=b[i]='0';
}
else
{
a[i]='0';
b[i]=x[i];
}
}
cout<<a<<endl<<b<<endl;
}
return 0;
}