zoukankan      html  css  js  c++  java
  • YTU 2895: H--唱歌的鸟儿

    2895: H--唱歌的鸟儿

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 26  解决: 10

    题目描述

    烟大东门有一棵大杨树,树上经常会有很多鸟儿飞来飞去。春天来了,学生物的小姜发现了一些规律。在这棵杨树上,假如来了一只雄鸟,它会在树上唱歌,如果 p 分钟内有一只雌鸟飞来和它一起唱,它们就会一直呆在树上不走了,否则 p 分钟之后,这只雄鸟就会飞走。假如来的是只雌鸟,如果没有落单的雄鸟在树上,它不会落到树上而是直接飞走,否则它会选择等待时间最长的雄鸟和它一起唱歌,就再也不走了。如果在某个时刻,同时发生了鸟儿的飞进飞出,那么先有一只鸟儿飞出枝头,再由另一只鸟儿飞上枝头。
    现在小姜记录了一段时间飞来这棵杨树的鸟儿,每隔一分钟可能会飞来一只雌鸟或雄鸟,或者什么都没有发生,现在小姜想知道这段时间内树上最多有多少只鸟儿,你可以帮助他吗?

    输入

    首先输入一个正整数T,T <= 50,表示有T组数据。
    每组第一行给出两个整数n、p,分别表示记录时间段的长度,和每个雄鸟最多能等待的时间(1 < n <= 1000,1 <= p <= 10)。
    第二行为一个长度为n的字符串,由 0, 1, 2 三种字符构成,表示这段时间内鸟儿飞来的情况,0表示没有鸟飞来,1表示来的是雄鸟,2表示来的是雌鸟。

    输出

    每组数据输出一行只包含一个数,表示最多的鸟儿数量。

    样例输入

    5
    10 1
    1212121212
    10 3
    1111122222
    16 3
    2221112222211111
    2 1
    22
    5 4
    11111
    

    样例输出

    10
    6
    9
    0
    4
    

    提示

    参考第三组样例,第15只鸟飞上枝头的时候,第12只鸟已经离开了。第12只鸟离开的原因是因为第15只是雄鸟,如果第15只是雌鸟,第12只就不会飞走了。

    你  离  开  了  ,  我  的  世  界  里  只  剩  下  雨  。  。  。

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
    #define N 1005
    struct node
    {
        int a,b;
    } f[N];
    char str[N];
    int max(int a,int b)
    {
        return a>b?a:b;
    }
    int main()
    {
        int i,j,n,p,T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&p);
            memset(f,0,sizeof(f));
            scanf("%s",str);
            for(i=0; i<n; i++)f[i].a=str[i]-'0';
            for(i=0; i<n; i++)
            {
                if(f[i].a==2)
                {
                    for(j=max(0,i-p); j<i; j++)
                        if(f[j].a==1&&f[j].b!=-1)
                        {
                            f[j].b=-1;
                            f[i].b=-1;
                            break;
                        }
                }
            }
            int t=0,cnt=0,ans=0;
            for(i=0; i<n; i++)
            {
                cnt=0;
                if(f[i].b==-1)t++;
                if(i-p<0)j=0;
                else j=i-p+1;
                for(; j<=i; j++)
                    if(f[j].a==1&&f[j].b!=-1)cnt++;
                ans=max(ans,t+cnt);
            }
            printf("%d
    ",ans);
        }
        return 0;
    }

  • 相关阅读:
    PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键
    支付宝支付开发——当面付条码支付和扫码支付
    C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
    ***微信 该连接无法访问问题解决办法
    JQuery 导入导出 Excel
    用PowerDesigner对现有的数据库反向工程建立E-R图
    js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
    微信网页第三方登录原理
    C# 添加Windows服务,定时任务
    微信公众平台开发(104) 自定义菜单扫一扫、发图片、发地理位置
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989615.html
Copyright © 2011-2022 走看看