zoukankan      html  css  js  c++  java
  • P2058 海港

    P2058 海港

    题解

    这道题就是给出你n艘船,让你看看以当前船停靠时间为截止时间,24h以内乘客来自多少不同的国家

    一开始会想到来一艘船就记录下本船的到达时间,到达人数,以及乘客的国籍

    但是你会发现这很占空间

    而且船只进来的顺序都是递增的,也就是一旦当前船只不需要某个24h以外的船只,那么这个24h以外的船只就没用了,所以根本没有必要记录这么多

    于是乎我们想到了队列

    队列存放每个乘客的信息:到达时间t,国籍g

    我们再开一个natin数组记录每个国家有多少个乘客

    对于新进入的船只,如果乘客队列里非空,那我们就从头看一看,不断枚举队首

    (1)如果当前乘客已经超时了,就说明他已经没有利用价值了,natin[now.g]--,并且把他出队,如果natin[now.g]减少到0,也就是说明24h内已经没有这个国家的人了,ans就要--

    (2)如果当前乘客没有超时,那么他后边的乘客也一定不会超时,跳出队列

    当然新进的船只里面也有一堆新乘客对吧

    我们把这些新乘客也入队,记录他们的国籍,如果一旦一个国籍的人数由0->1那么就说明来了一个新国籍的人,ans要++

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n,ti,ki,x; 
    int ans;
    int natin[300010];
    struct node
    {
        int t;
        int g;
    };
    queue<node>boat;
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&ti,&ki);
            while(!boat.empty())
            {
                node now=boat.front();
                if(now.t<=ti-86400)
                {
                    natin[now.g ]--;
                    if(natin[now.g ]==0) ans--;
                    boat.pop();
                    continue;    //一旦这个乘客超时,那么他后边的乘客也有可能超时,continue就忽略了跳出队列的break 
                }
                
                break;  //一旦这个乘客不超时,那么就不会执行if语句,直接跳出 
            }
            
            for(int j=1;j<=ki ;j++)
            {
                scanf("%d",&x);
                node now;
                now.t =ti;now.g =x;
                boat.push(now);
                natin[x]++;
                if(natin[x]==1) ans++;
            }
            
            printf("%d
    ",ans);
            
        }
        
        return 0;
    }
  • 相关阅读:
    Delphi XE5 android 蓝牙通讯传输
    Delphi XE5 android toast
    Delphi XE5 android openurl(转)
    Delphi XE5 如何设计并使用FireMonkeyStyle(转)
    Delphi XE5 android 捕获几个事件
    Delphi XE5 android listview
    Delphi XE5 android 黑屏的临时解决办法
    Delphi XE5 android popumenu
    Delphi XE5 android 获取网络状态
    Delphi XE5 android 获取电池电量
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11095210.html
Copyright © 2011-2022 走看看