题目链接:http://codeforces.com/problemset/problem/401/C
题目意思:
给你 0 和 1 ,组成一个 01 串,满足下面两个条件:
1、没有两个连续的 0
2、没有三个连续的1
接替思路:
出现比较极端的情况有以下几种:(n 是 0 的个数, m 是 1 的个数 )
11011011011 m = 2 * ( n + 1) // 如果 m > 2*( n+ 1) ,则在该串中任意位置加一个 1 都会不满足题目条件
0101010 n = m + 1 // 如果 n > m + 1 , 则在该串中任意位置加一个 0 都会不满足题目条件
当 n = m + 1 时需要前置一个 0 ,其他情况都从 1 开始。 当 m < 2 * (n + 1) 的时候处理 “10” 串,并 m-1 , n-1 。 如果还剩有 0 和 1 ,个数总会满足 m = 2*(n+1) 。或者0 处理完了,剩下 0个、1 个、 2个1。
代码:
/* ******
* @Codeforces Problem 401C. Team
* @2014.5.3
*****/
#include <stdio.h>
int main(){
int n, m;
scanf("%d%d", &n, &m);
if(m > 2*(n+1) || n > m+1){
printf("-1\n");
return 0;
}
// n 是 0 的个数 m 是 1 的个数
if(n == m + 1){
printf("0");
n--;
}
while(m < 2*(n+1) && m > 0 && n > 0){
printf("10");
m--;
n--;
}
while(n-- > 0){
printf("110");
m -= 2;
}
while(m-- > 0)
printf("1");
return 0;
}
后记:开始就将题目看错了,以为是不能从0开始和结尾。英文阅读能力还要加强。