水题也写写。不过刚开始我没想到0比1多的情况
时间限制:
7000ms
单点时限:
1000ms
内存限制:
256MB
描述
给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001"和"11"。
如果存在符合条件的01串则输出字典序最小的S,否则输出NO。
输入
一行两个整数,表示n和m。(0<=n,m<=100000,0<n+m)
输出
一行一个字符串,为字典序最小的S或者NO。
2 3样例输出
10101代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n,m,p;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(m>n+1||((m==0)&&(n==0)))
cout<<"NO"<<endl;
else
{
if(m==n+1)
{
p=0;
for(int i=1;i<=m+n;i++)
{
p=p^1;
cout<<p;
}
cout<<endl;
}
else if(m==n)
{
p=1;
for(int i=1;i<=m+n;i++)
{
p=p^1;
cout<<p;
}
cout<<endl;
}
else if(n>m)
{
int p=1;
for(int i=1;i<=m*2;i++)
{
p=p^1;
cout<<p;
}
for(int i=1;i<=n-m;i++)
{
cout<<"0";
}
cout<<endl;
}
}
}
return 0;
}