[codeforces 1328C] Ternary XOR 题意易懂,但不好编

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;
}
发布了631 篇原创文章 · 获赞 553 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/mrcrack/article/details/105134210