hihocoder#1144 01串

Posted by Tango on September 20, 2015

算法原题来自:hihocoder

你可以在我的github获取源码:https://github.com/Wtango/hihocoder

给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串”001″和”11″。如果存在符合条件的01串则输出字典序最小的S,否则输出NO。

我们进行分类讨论:

  • 当m > n+1时,永远无法满足 “不存在11字串“条件
  • 当m = n+1时,只有1010101… 这样的的串满足条件
  • 当m <= n时,最小字典序出现的情况则是010101…0000,在这种情况下必须出现成对的01直到1耗完为止,则可保证不存在”001″子串。
#include <stdio.h>
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	if(m > (n + 1)) {
		printf("NO\n");
		return 0;
	}
	if(m == (n + 1)) {
		putchar('1');
		while(--m) {
			putchar('0');
			putchar('1');
		}
		putchar('\n');
		return 0;
	}

	int nz = n - m;
	while(m--) {
		putchar('0');
		putchar('1');
	}
	while(nz--) {
		putchar('0');
	}
	putchar('\n');
	return 0;
}