zoukankan      html  css  js  c++  java
  • 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

     思路:统计最多连续0的个数和第二多连续0的个数,两个相加就是结果

        /*额 ,感觉自己的代码略乱啊*/
        #include"stdio.h"
        #include"string.h"
        int d[1100000];
        char s[1100000];
        int main()
        {
            int n,i=0,j=0,t=0,max1=0,max2=0,count;
            scanf("%d",&n);
            getchar();
            memset(d,0,sizeof(d));
            gets(s);
            s[n]='';
            while(s[i+1]!='')
            {   count=0;
               for(i=t;s[i]!='';i++)
               if(s[i]==48)
               {count++;
               if(s[i+1]==49) break;}
                d[j]=count;
               if(d[j]>max1)  {max2=max1;max1=d[j];}
               else if(d[j]>max2)  {max2=d[j];}
               t=i+1;j++;
            }
            printf("%d
    ",max1+max2);
            return 0;
        }
    View Code
  • 相关阅读:
    电脑知识
    编译器错误信息: CS0433: 类型“ASP.global_asax”同时存在于“c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727...的解决方法
    windows平台下的oracle ORA-01031的解决方法
    .NET下使用HTTP请求的正确姿势
    EasyUI Datagrid 分页
    Js 运算符(加减乘除)
    Navicat 运行 Oracle 存储过程示例
    oracle数据库忘记sys(或system)账户密码
    SQL Server 死锁问题
    C# 给某个方法设定执行超时时间
  • 原文地址:https://www.cnblogs.com/orchidzjl/p/4263442.html
Copyright © 2011-2022 走看看