题目描述
给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001"和"11"。
如果存在符合条件的01串则输出字典序最小的S,否则输出NO。
输入
一行两个整数,表示n和m。(0<=n,m<=100000,0<n+m)
注意:有多组输入数据。
输出
输出符合要求的01串
样例输入
2 3
样例输出
10101
解析:注意0可以为第一位,这里列出规律.
n > m: m个01 + n-m 个0
n == m: n个01
n = m-1: 1 + n个01
n !=0&&m==0 : n个0
n ==0&&m==1: 1 (因为此时m>1会出现11,与题意就矛盾了)
其他情况均输出 NO
#include <stdio.h>
int main()
{
int n,m,i;
while(~scanf("%d %d",&n,&m)){
if(n>m){
for(i=0;i<m;i++) printf("01");
for(i=0;i<n-m;i++) printf("0");
printf("\n");
}else if(n==m){
for(i=0;i<n;i++) printf("01");
printf("\n");
}else if(n==m-1){
printf("1");
for(i=0;i<n;i++) printf("01");
printf("\n");
}else if(n!=0&&m==0){
for(i=0;i<n;i++) printf("0");
printf("\n");
}else if(n==0&&m==1){
printf("1\n");
}else{
printf("NO\n");
}
}
return 0;
}