题目大意:
构造一个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';
}
}



京公网安备 11010502036488号