C. Ternary XOR
题目链接-C. Ternary XOR
题目大意
三进制的数
由三进制的数
和
通过操作
获得,给定
求出
和
并使得
最小,且c的三进制数首位保证为2
解题思路
贪心
至于
和
直接均分即可,如果是
,分给
必定有一个是
,另一个自然就为
,假设该位上
分到
,把
后面全变成0即可;因为这一位
大于
,后面无论怎么分
都会大于
,这样即保证了
最小
附上代码
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const double PI=acos(-1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
int n;
char s[N],a[N],b[N];
signed main(){
int t;
cin>>t;
while(t--){
cin>>n;
bool ass=0;
cin>>s;
for(int i=0;i<n;i++){
if(ass){
a[i]='0';
b[i]=s[i];
continue;
}
if(s[i]=='2')
a[i]=b[i]='1';
else if(s[i]=='1'){
a[i]='1';
b[i]='0';
ass=1;
}
else
a[i]=b[i]='0';
}
for(int i=0;i<n;i++)
cout<<a[i];
cout<<endl;
for(int i=0;i<n;i++)
cout<<b[i];
cout<<endl;
}
return 0;
}