Problem - 401C - Codeforces
解析:
因为0不能相邻,所以0之间最少 n-1 个位置,最多 n+1 个位置,如果 m<n-1显然不符题意。
并且1最多连续两个,所以 m>2*n+2 同样不符题意。
其余情况构造即可
#include<bits/stdc++.h>
using namespace std;
int n,m;
signed main(){
scanf("%d%d",&n,&m);
if(m<n-1||m>2*n+2) puts("-1");
else{
if(m==n){
for(int i=1;i<=n;i++) printf("01");
}
else if(m==n-1){
for(int i=1;i<=n-1;i++) printf("01");
printf("0");
}
else{
int a=m-n-1,b=n+1-a;
for(int i=1;i<=n;i++){
if(a>0) printf("11"),a--;
else printf("1"),b--;
printf("0");
}
if(a>0) printf("11"),a--;
else printf("1"),b--;
}
}
return 0;
}