Codeforces Round #629 (Div. 3) 比赛人数10967
[codeforces 1328C] Ternary XOR 题意易懂,但不好编
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
也在线测评地址https://codeforces.ml/contest/1328/problem/C
题意易懂,但不好编,第一遍提交就WA,当时就一团浆糊了,耗费了大量的时间,反复读题,没有问题啊;反复举例,测试程序,没有问题啊;反复读代码,没有问题。
一度担心,该题要烂尾了,
再读代码,灵光一闪,有了。具体应该是自最高位向最低位的过程中,若之前a,b同一位置上的数字相同,则,之后的位置上的数据平分,若之前a,b同一位置上的数字不同,剩下的数据统统赋给b,a赋值0,
若有不明,请看举例,若能通过该组样例,程序应没有问题了
Input:
1
6
201011
Output:
101000
100011
AC代码如下
#include <stdio.h>
#define maxn 50010
char x[maxn],a[maxn],b[maxn];
int main(){
int t,n,i,flag;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
scanf("%s",x+1);
a[1]='1',b[1]='1',flag=0;//flag标记从最高位起,a,b同一位上数据,是否连续相同
for(i=2;i<=n;i++)
if(a[i-1]==b[i-1]&&!flag){
if(x[i]=='2'||x[i]=='0')
a[i]=b[i]=(x[i]-'0')/2+'0';
else a[i]='1',b[i]='0';
}else flag=1,a[i]='0',b[i]=x[i];
a[n+1]=b[n+1]='\0';
printf("%s\n",a+1);
printf("%s\n",b+1);
}
return 0;
}