hiho #1144 : 01串(模拟)

#1144 : 01串

时间限制: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

分析:

  不能存在“001”和11,根据概率统计的插空法,其实就是在_1_1_1_的地方填0。

如果当m=n-1的时候,刚好1比0多1个。。。所以就是若干个“10”,然后接一个1.

如果n>=m,就是0多,1少,不能出现001,那么就若干个“01”,然后后面接0.

  n<m,必然有一个11连在一起,NO

AC程序:

 1 #include "iostream"
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n, m;
 8     while (cin >> n >> m)
 9     {
10         if ((m - n >= 2) || (n == 0 && m == 0))
11             cout << "NO" << endl;
12         else if (n == m - 1)
13         {
14             for (int i = 0; i<n; i++)
15                 cout << "10";
16             cout << "1" << endl;
17         }
18         else
19         {
20             for (int i = 0; i<m; i++)
21                 cout << "01";
22             for (int i = m; i<n; i++)
23                 cout << "0" ;
24             cout << endl;
25         }
26     }
27 }
原文地址:https://www.cnblogs.com/SeekHit/p/6296446.html