题目大意:

构造一个01字符串,使得串的mex值最大。

‘0’:mex=1;

‘1’:mex=0;

‘01’:mex=2;

解题思路:

要想值最大,就要尽可能多的01串,当a=b时,只要输出a个01或10即可;而当a>b的时候,可以把1当作隔板,就是用1来分隔0,把0分隔为b+1块,每块长度a/(b+1),若有余数r,就将其中r块分别加入1个0,每块之间放入1。而b>a时,相反即可。

参考代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1e9+7;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	ll t;
	cin>>t;
	while(t--){
		ll a,b;
		cin>>a>>b;
		if(a==0){
			cout<<string(b,'1')<<'\n';
			continue;
		}
		if(b==0){
			cout<<string(a,'0')<<'\n';
			continue;
		}
		if(a==b){
			for(int i=0;i<a;i++){
				cout<<"10";
			}
		}
		else if(a>b){
			ll group=b+1;
			ll p=a/group;
			ll r=a%group;
			for(int i=0;i<group;i++){
				ll cnt=p+(i<r?1:0);
				cout<<string(cnt,'0');
				if(i<b)cout<<1;
			}
		}
		else{
			ll group=a+1;
			ll p=b/group;
			ll r=b%group;
			for(int i=0;i<group;i++){
				int cnt=p+(i<r?1:0);
				cout<<string(cnt,'1');
				if(i<a)cout<<0;
			}
		}
		cout<<'\n';
	}
}