F. Binary String Reconstruction

F. Binary String Reconstruction

原题链接:传送门

题目大意

给定我们三个数字a , b , c

a表示两个相邻的字符和为0的情况:00

b表示两个相邻的字符和为1的情况:01 , 10

c表示两个相邻的字符和为2的情况: 11

现在让你构造一个二进制串,要求二进制串中的a , b , c三种类别的出现次数等于给定的 a b c

例如:

a = 1 b = 3 c = 5

对应结果:
1110011110

分析

根据print any of them 可以推断出这题大概率是一个构造题,

对于a和c的情况来说,如果要构造的尽可能简单一定是要他们保证自己具有一连串连续的0或者1

即对于以上样例,我们可以知道其一定具有a + 1 个连续的 0 和 c + 1 个连续的1

那么我们只需要考虑b怎么安置在这样的字串之中

AC 代码

C++ code

void slove()
{
	int a , b , c;
	cin >> a >> b >> c;
	if(b == 0)
	{
		if(a != 0)cout << string(a + 1 , '0') << endl;
		else cout << string(c + 1 , '1') << endl;
		return;
	}
	string ans;
	for(int i = 0;i < b + 1;i ++)
	{
		if(i & 1)ans += "0";
		else ans += "1";
	}
	ans.insert(1 , string(a , '0'));
	ans.insert(0 , string(c , '1'));
	cout << ans << endl;
}
原文地址:https://www.cnblogs.com/wlw-x/p/13586063.html