zoukankan      html  css  js  c++  java
  • 【NOIP2016普及组】复赛——海港

    题目自己,复制会︿( ̄︶ ̄)︿


    呵呵,这道题之那啥,反正可以做,但你得选择,爆空间还是爆时间

    ……那还叫可以做……


    好的,说说这道题的思路,爆搜队列嘛:

    用一个结构体队列存每个人来的时间和他的国籍,用一个vis数组存每个人来的次数,是第一次来sum便加一。

    然后从前面第一个人开始扔(原谅我用这个词,因为我找不到更好的词了)下船,直到第一个人与当前这艘船相差没超过1天即可,每扔一个人便vis[此人国籍]减一,当这个人来的次数为0时,sum减一。

    就这样,既不爆时间也不爆空间,完美!


    你们期待的代码:

    #include<cstdio>
    #include<queue>
    using namespace std;
    struct p
    {
        int pt,pn;//存每个人的时间和国籍
    };
    queue <p> ship;
    int n,vis[100005],sum;
    int main()
    {
        scanf("%d",&n);
        while(n--)
        {
            int t,m,_n;
            scanf("%d%d",&t,&m);//船来的时间和人数
            for(int i=1;i<=m;i++)
            {
                scanf("%d",&_n);
                p x;
                x.pt=t;
                x.pn=_n;
                ship.push(x);//将这个人存入队列(就是那艘邪恶的不能久待就把你扔下去的船)
                vis[_n]++;
                if(vis[_n]==1)//如果是第一次来
                    sum++;
            }
            while(1)
            {
                int a,b;
                a=ship.front().pt,b=ship.front().pn;//检查这个人
                if(t-a<86400)//与当前间隔没超过一天
                    break;
                vis[b]--;
                if(vis[b]==0)
                    sum--;
                ship.pop();//把这个人扔出去
            }
            printf("%d
    ",sum);//输出sum
        }
    }

                                                                                                                                                                               By WZY

  • 相关阅读:
    Qt之QFileSystemWatcher
    Qt之qSetMessagePattern
    物联网操作系统HelloX V1.80测试版发布
    CoreOS Linux available in China
    等火车
    HTTP 简介
    建造模式Builder
    MariaDB exists 学习
    javascript 中 typeof 的使用
    Java字符串null相加
  • 原文地址:https://www.cnblogs.com/LinqiongTaoist/p/7203746.html
Copyright © 2011-2022 走看看