F题
由题意得,对于mex可分为三种情况,当字符串中只含有1时,mex最小,为0,当字符串中只含有0时,mex为1,当字符串中含有0和1时,mex最大,为2,所以要尽量让字符串中的01错开,整体思路就是将数量多的先排出来,然后将数量少的均匀的插入
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int a,b;cin>>a>>b;
if(a==b){
for(int i=1;i<=a;i++)
cout<<0<<1;
cout<<endl;
}
else if(a==0){
for(int i=1;i<=b;i++)
cout<<1;
cout<<endl;
}
else if(b==0){
for(int i=1;i<=a;i++)
cout<<0;
cout<<endl;
}
else if(a>b){
int n=a/(b+1);
int m=a%(b+1);
for(int i=1;i<=m;i++){
for(int j=1;j<=n+1;j++)
cout<<0;
cout<<1;
}
for(int i=1;i<=b-m;i++){
for(int j=1;j<=n;j++)
cout<<0;
cout<<1;
}
for(int i=1;i<=a+b-m*(n+2)-(n+1)*(b-m);i++)
cout<<0;
cout<<endl;
}
else if(a<b){
int n=b/(a+1);
int m=b%(a+1);
for(int i=1;i<=m;i++){
for(int j=1;j<=n+1;j++)
cout<<1;
cout<<0;
}
for(int i=1;i<=a-m;i++){
for(int j=1;j<=n;j++)
cout<<1;
cout<<0;
}
for(int i=1;i<=a+b-m*(n+2)-(n+1)*(a-m);i++)
cout<<1;
cout<<endl;
}
}
}
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int a,b;cin>>a>>b;
if(a==b){
for(int i=1;i<=a;i++)
cout<<0<<1;
cout<<endl;
}
else if(a==0){
for(int i=1;i<=b;i++)
cout<<1;
cout<<endl;
}
else if(b==0){
for(int i=1;i<=a;i++)
cout<<0;
cout<<endl;
}
else if(a>b){
int n=a/(b+1);
int m=a%(b+1);
for(int i=1;i<=m;i++){
for(int j=1;j<=n+1;j++)
cout<<0;
cout<<1;
}
for(int i=1;i<=b-m;i++){
for(int j=1;j<=n;j++)
cout<<0;
cout<<1;
}
for(int i=1;i<=a+b-m*(n+2)-(n+1)*(b-m);i++)
cout<<0;
cout<<endl;
}
else if(a<b){
int n=b/(a+1);
int m=b%(a+1);
for(int i=1;i<=m;i++){
for(int j=1;j<=n+1;j++)
cout<<1;
cout<<0;
}
for(int i=1;i<=a-m;i++){
for(int j=1;j<=n;j++)
cout<<1;
cout<<0;
}
for(int i=1;i<=a+b-m*(n+2)-(n+1)*(a-m);i++)
cout<<1;
cout<<endl;
}
}
}

京公网安备 11010502036488号