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 }