传送门
题意
题意给出一个x的三元组,x的第一个数字必须是2,求出两个三元组a和b,使得
a
⨀
b
a\bigodot b
a⨀b=x,规定其异或运算为(ai+bi)%3=xi.
a,b必须满足
a
⨀
b
a\bigodot b
a⨀b=x和max(a,b)最小化。
思路
再没找到x=1的情况先均分;找到x字符串中的第一个1,作为a和b的分界点i,让ai=1,bi=0,后面x的所有值都付给b,a为0.
AC代码
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int MAXN=5e4+5;
char a[MAXN],b[MAXN],c[MAXN];
int main(){
int t;
cin>>t;
while(t--){
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int flag1=0,flag2=0;
int pos=n;
for(int i=0;i<n;i++)
if(a[i]=='1'){
pos=i;
break;
}
for(int i=0;i<pos;i++){
if(a[i]=='0') b[i]='0',c[i]='0';
if(a[i]=='2') b[i]='1',c[i]='1';
}
b[pos]='1',c[pos]='0';
for(int i=pos+1;i<n;i++){
b[i]='0',c[i]=a[i];
}
for(int i=0;i<n;i++) cout<<b[i];
puts("");
for(int i=0;i<n;i++) cout<<c[i];
puts("");
}
return 0;
}