ACM复习(32)9508 诸葛给我牌

Description

这里写图片描述

三国杀是现在流行的桌游..分为两方,用牌来进行对战,每一张牌都有自己的属性,而每一个武将(就是玩家)都有自己的技能.
每一次玩家都从牌堆里面抽两张牌到手牌上,然后进行出牌杀死对方玩家(更具体请参考官方说明)..
诸葛亮的技能就是能看到牌堆上面的5张牌而可以对这5张牌进行摆放,绝对自己或者下家得到的牌.
而甄姬的技能就是一开始可以在牌堆里面摸牌,只要摸到的是黑色牌都可以拿到手牌上,一直摸到不是黑色的牌为止.
现在诸葛亮和甄姬刚好坐在一起,甄姬成为了诸葛亮的下家.现在诸葛亮想让甄姬拿到尽可能多的牌.应该如何摆放牌呢
现在将诸葛亮的技能加强点(5张太少了,不够给力),他可以看到牌堆的所有牌,但他不能抽牌,而只能去掉牌堆里面的某些牌,而去掉牌要符合以下规则
1. 从牌顶一直拿
2. 从牌中间拿出连续的一段牌
这两个规则最多只能用一次或者不用
而且这技能是在诸葛亮拿完自己的手牌才发动的,问甄姬最多能拿到多少张呢
由于牌要不是红,要不是黑,则0表示黑,1表示红
例如
00011101100111000000
如果我把前面的111拿走,那么甄姬就能拿到前面的4个0
如果我把000111和之后的11拿走,则变为0(11)00111000000,则甄姬可以拿到前面的3张,括号表示已经拿走
但如果我把前面的000111011和最后的111拿走,就甄姬就可以拿到000000000. 8张了
那如果把中间的11101100111拿走呢? 我们可以拿到9张。
记住牌顶和中间都只能拿一次或者不拿

输入格式
第一行表示串长n(1<=n<=1000000)
第二行是长度为n的01串表示牌堆里面的牌

输出格式
一个数表示最多可以拿到的牌数

输入样例
20
00011101100111000000

输出样例
9


解题思路

其实就是找出两个最长的零串而已

#include<stdio.h>
int main()
{
    int n, l1 = 0, l2 = 0, count = 0;
    char ch;
    scanf("%d", &n);
    scanf("%c", &ch);
    for(int i = 0; i < n; i ++)
    {   
        scanf("%c", &ch);
        if(ch != '0')
        {
            if(count > l2)
            {
                l1 = l2;
                l2 = count;
            }
            else if(count > l1)
                l1 = count;
            count = 0;
        }
        else
            count ++;
    }
    printf("%d\n", count > l1 ? count + l2 : l1 + l2);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值