Codeforces Problem 401C. Team

题目链接: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开始和结尾。英文阅读能力还要加强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值