[codeforces 1352F] Binary String Reconstruction 先处理00,再处理11,最后处理(01或10)

Codeforces Round #640 (Div. 4)   参与排名人数9749,终于弄明白账号前*的意义,*out of competition,也即虽然该用户参加本场比赛,但不参与排名。

[codeforces 1352F]   Binary String Reconstruction   先处理00,再处理11,最后处理(01或10)

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

在线测评地址http://codeforces.com/contest/1352/problem/F

ProblemLangVerdictTimeMemory
F - Binary String Reconstruction GNU C++17Accepted15 ms3600 KB

样例模拟如下

1 3 5
1对0,5对1,3对(01或10)
先构造,1对0,5对1,
0011111请注意,此时,已经减少了1对(01或10)
继续构造剩下的2对(01或10)
001111101

1 1 1
1对0,1对1,1对(01或10)
先构造,1对0,1对1,
0011请注意,此时,已经减少了1对(01或10)
继续构造剩下的0对(01或10)
0011

3 9 3
3对0,3对1,9对(01或10)
先构造,3对0,3对1,
00001111请注意,此时,已经减少了1对(01或10)
继续构造剩下的8对(01或10)
0000111101010101

0 1 0
0对0,0对1,1对(01或10)
构造01

3 1 2
3对0,2对1,1对(01或10)
先构造,3对0,2对1,
0000111请注意,此时,已经减少了1对(01或10)
继续构造剩下的0对(01或10)
0000111

0 0 3
0对0,3对1,0对(01或10)
先构造,3对1,
1111

2 0 0
2对0,0对1,0对(01或10)
先构造,2对0,
000

AC代码如下

#include <stdio.h>
#include <string.h>
char s[400];
int main(){
	int t,a,b,c,i,len;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&a,&b,&c);
		len=0;
		if(a>0){//先处理a对00
			for(i=0;i<=a;i++)s[i]='0';
			len=a+1;
		}
		if(c>0){//再处理c对11
			if(len>0)b--;//要判定开始11类型时,之前的字母是否是0.len>0,之前字母是0
			for(i=len;i<=len+c;i++)s[i]='1';
			len=len+c+1;
		}
		if(b>0){//最后处理b对(01或10)
			if(len==0){//当前字串长度是0.1对(01或10)形态:01;  2对 010;  3对 0101;  4对 01010
				s[0]='0';
				for(i=1;i<=b;i++)
					if(i%2)s[i]='1';
					else s[i]='0';
				len=b+1;
			}
			else if(s[len-1]=='1'){//前面是1.1对(01或10)形态:0;  2对:01;  3对:010;  4对:0101
				for(i=len;i<len+b;i++)
					if((i-len)%2==0)s[i]='0';
					else s[i]='1';
				len=len+b;
			}else if(s[len-1]=='0'){//前面是0.1对(01或10)形态:1;  2对:10;  3对:101
				for(i=len;i<len+b;i++)
					if((i-len)%2==0)s[i]='1';
					else s[i]='0';
				len=len+b;
			}
		}
		s[len]='\0';
		printf("%s\n",s);
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值