• 洛谷 P2058 海港 解题报告


    P2058 海港

    题目描述

    小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。

    小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第(i)艘到达的船,他记录了这艘船到达的时间(t_i)(单位:秒),船上的乘客数星(k_i),以及每名乘客的国籍(x(i,1), x(i,2),…,x(i,k));。

    (K)统计了(n)艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。

    形式化地讲,你需要计算(n)条信息。对于输出的第i条信息,你需要统计满足(t_i-86400<t_p<= t_i)的船只(p),在所有的(x(p,j))中,总共有多少个不同的数。

    输入输出格式

    输入格式:
    第一行输入一个正整数(n),表示小(K)统计了(n)艘船的信息。

    接下来(n)行,每行描述一艘船的信息:前两个整数(t_i)(k_i)分别表示这艘船到达海港的时间和船上的乘客数量,接下来(k_i)个整数(x(i,j))表示船上乘客的国家。

    保证输入的(t_i)是递增的,单位是秒;表示从小K第一次上班开始计时,这艘船在第(t_i)秒到达海港。
    保证(1<=n<=10^5),(sum {k_i}<=3∗10^5),(1<=x(i,j)<=10^5),(10^9<=t_{i−1}<=ti<=10^9)
    输出格式:
    输出(n)行,第(i)行输出一个整数表示第(i)艘船到达后的统计信息。


    昨天听教练说,普及组的题目不怎么考算法,我的内心陡然一惊,那岂不是怎么暴力怎么来?

    事实上并不是那么简单的,不考算法,就十分的考思想了,昨天被2016T4魔法阵吓到了于是打算先写写第三题。

    今天读完题目,恩?洛谷高性能?怕不是要卡常?那直接暴力来吧。拿个桶把当前的存起来,把船的信息压进队列,交了以后

    这个,看来事情并没有这么简单,发现人最多有三十万个,那直接存人和船的时间断点好了。

    尴尬,,,

    加一个上下界优化好了,每次遍历桶的时候只遍历到之前出现过得最大的人。

    好家伙,不能这样搞。

    又想了想,如果更新桶的时候某个种类由0变成了1就把答案加1,反之减1,不就刚好保证了300000*2吗

    原来正确复杂度是(O(sum k)),所以有时候想练练思想,不妨多做做没有什么算法的题目。


    #include <cstdio>
    #include <cstring>
    int max(int x,int y){return x>y?x:y;}
    const int N=100010;
    int ans[N],n,t,k,tour[N*3],time[N][2],l=1,r,p=1,now;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&t,&k);
            while(time[l][0]<=t-86400&&l<=r)
            {
                for(;p<=time[l][1];p++)
                {
                    ans[tour[p]]--;
                    if(!ans[tour[p]]) now--;
                }
                l++;
            }
            for(int j=time[r][1]+1;j<=time[r][1]+k;j++)
            {
                scanf("%d",tour+j);
                ans[tour[j]]++;
                if(ans[tour[j]]==1)
                    now++;
            }
            time[++r][0]=t;
            time[r][1]=time[r-1][1]+k;
            printf("%d
    ",now);
        }
        return 0;
    }
    
    

    2018.6.18

  • 相关阅读:
    rhel 6.4 + udev+ 11.2.0.3 + gi + asm+ rac 双节点安装
    rhel 6.4 + udev + 11.2.0.3 + asm 单点安装
    vmware 中linux虚拟机动态添加硬盘
    flashback drop
    flashback query
    11g crsctl start/stop crs 和 crsctl start/stop cluster 的关系
    10g crs 启动报错的记录
    检测数据库日志的切换频率及归档文件大小的sql
    用widthStep的方法来增加某范围的像素----与imageROI对比
    用imageROI来增加某范围的像素
  • 原文地址:https://www.cnblogs.com/butterflydew/p/9195391.html
Copyright © 2020-2023  润新知