链接:
https://codeforces.com/problemset/problem/1328/C
题意
多组案例,给你一个首位是2,其他位由0,1,2组成的数x,长度为n,存在一种特殊的运算⊙,若c = a⊙b,则ci = (ai + bi) % 3(a,b长度都等于n),比如:10222⊙11021=21210;现需根据给出的x,找到合适的a和b,并且为a和b相差最少的一对
1 ≤ n ≤ 5e4
∑n ≤ 5e4
Example
input
4
5
22222
5
21211
1
2
9
220222021
output
11111
11111
11000
10211
1
1
110111011
110111010
解析
思路就是数字只有0,1,2三种情况,寻找第一次1的位置,将其分为1和0,设分到1的为a,0的为b,现在a就是较大的那个数了,所以后面不管是什么数字,全部分给较小的b,让b尽可能地大,a后面全是0就可以了,因为a后面不管给1还是2,都会拉开a和b之间差距。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int _;
cin >> _;
while (_--)
{
int n;
cin >> n;
string x;
cin >> x;
string a = "1", b = "1";
bool flag = false;
for (int i = 1; i < n; i++)
{
if (x[i] == '1' && !flag)
{
a += "1";
b += "0";
flag = true;
}
else
{
if (flag)
{
a += "0";
b += x[i];
}
else
{
char c = '0' + (x[i] - '0') / 2;
a += c;
b += c;
}
}
}
cout << a << endl << b << endl;
}
return 0;
}