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]=‘\0‘;
        while(s[i+1]!=‘\0‘)
        {   count=0;
           for(i=t;s[i]!=‘\0‘;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\n",max1+max2);
        return 0;
    }

时间: 2024-12-19 20:06:33

9508 诸葛给我牌的相关文章

诸葛 理解产品、交互和运营

我们总是能听到创业者谈到重产品和重运营 这两个词,但是很少有人能真正理解和作出正确的判断. 我也遇到过求职者同时投产品和运营,用的却是同一份简历和求职信.另外还有更多的人分不清产品经理加交互设计师的,认为这基本上就是同一个职位,反正都是针对用户需求,增进体验嘛,"没啥区别吧,交互设计师是不是需要一定美工能力?会做UI? 难道不是嘛? " 这种言论竟然可以发生在领着高薪混迹互联网几年的人身上,让我时常觉得人才泡沫真心不是吹的-- 互联网是一个新兴行业,新到很多新入行的根本就不知道每天要做

[转]完美洗牌(Perfect Shuffle)问题

[转]原博文地址:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.09.md 完美洗牌算法 题目详情 有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后{a1,b1,a2,b2,....,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法. 题目来源:此题是去年2013年UC的校招笔试题,看似简单,按照题目所要

癞子麻将胡牌算法实现

最先实现的就是算法的实现. 需求:碰杠胡  ,不能吃 ,不能听 ,仅仅能自摸胡,当中癞子能够做随意牌可是不能碰和杠. 写的时候还不会玩麻将,还是老板教的.^_^ 最麻烦的是胡牌算法.之前搜到的都是不包括癞子正常的胡牌,用的是%3余2,当中余数2就是余的将的意思. 可是有癞子就不能这么用了.仅仅好自己写一个了. 一个有136张牌,万,饼,条,东西南北中发白34种牌. 有四个癞子是直接就胡牌的,最坏的情况是有3个癞子,可是假设遍历一遍不用逻辑推断就有34X34X34接近4万次. 想一下假设能胡牌,最

博弈问题-Alice与Bob拿牌游戏

Description Bob and Alice play a game, and Bob will play first. Here is the rule of the game: 1) There are N stones at first; 2) Bob and Alice take turns to remove stones. Each time, they can remove p^k stones. p is prime number, such as 2, 3, 5, ...

[JLOI2013]卡牌游戏

题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把卡片上的数字向所有玩家展示,然后按顺时针从庄家位置数第X个人将被处决即退出游戏.然后卡片将会被放回卡牌堆里并重新洗牌.被处决的人按顺时针的下一个人将会作为下一轮的庄家.那么经过N-1轮后最后只会剩下一个人,即为本次游戏的胜者.现在你预先知道了总共有M张卡片,也知道每张卡片上的数字.现在你需要确定每个

4月6日--关于算法数的练习题--扑克洗牌

扑克 1.定义一个数组,存放1-52(分别表示52张扑克,不含大.小王)其中1表示黑桃A,2表示黑桃2...,13表示 黑桃K,14表示红桃A......) 2.随机排列该数组 3.再将牌平均分给4个玩家(分成4个数组,按照发牌规则) 4.排序输出每个玩家的扑克(先按照花色:黑桃.红桃.梅花,方块;再按照大小) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q

从一副牌中随机抽一张牌

public class Demo { public static void main(String[] args) { //定于花色,1代表红桃,2代表黑桃,3代表梅花,4代表方片 int a = (int) (Math.random()*4+1); //定义牌的张数 int b = (int) (Math.random()*13+5); switch(b){ case 1: if(a==1){ System.out.println("你的牌是红桃A"); }else if(a==2

碧生源牌常润茶 商品库存调整

I900003 碧生源牌常润茶 sphwph数量1月20日不明原因 数量多了6007 现在初步调整,批号核对完调整相应批号 update sphwph set shl=5947-5947 where spid='SPH00000553' and pici='JHAYMA00018523_22' and hw='HWI00000002' update sphwph set shl=51-60 where spid='SPH00000553' and pici='JHAYMA00018523_22'

2017联合办公洗牌关键词:生存、扩张、盈利、因地制宜_转

转自:http://www.iheima.com/zixun/2017/0206/161059.shtml "大众创业,万众创新",不只催生了千军万马的创新创业者,更衍生出联合办公这样独特的办公模式.这一办公模式从无到有,从最初单一的复制借鉴到今天品类繁多的百花齐放,已经进化成对创业者有着致命吸引力的办公地址选择. 粗略统计,截至2016年初,中国联合办公空间数量已经超过2300家. 福兮祸所依,在各式各样的联合办公野蛮生长的背后,可以预见的是市场优胜劣汰的残酷洗牌. 未来联合办公的发