题意:给你a,b,x。输出任意一个长度为a+b的二进制串,满足 Si != Si+1的下标个数为x个且必须包含a个0和b个1。
题解:先一替一个构造出x,然后直接把剩下的的0和1全部插入一个相邻的0和1旁边就行了。利用string自带insert还有string的自定义初始化会是代码实现变得异常简单。(刚开始自己手动实现这个过程,很麻烦......)
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
#include <algorithm>
#define int long long
using namespace std;
const int maxn=1e6+5;
int a[maxn],b[maxn];
main() {
int a,b,x;
cin>>a>>b>>x;
string ans;
int flag=1;
if(a>b)flag=0;
for(int i=0;i<=x;i++){
if(flag)ans+="1",b--,flag=0;
else ans+="0",a--,flag=1;
}
ans.insert(ans.find("0"),string(a,'0'));
ans.insert(ans.find("1"),string(b,'1'));
cout<<ans<<endl;
}