[NOIP2016 普及组] 海港

题目链接

题目背景

NOIP2016 普及组 T3

题目描述

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

小 K 对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第 iii 艘到达的船,他记录了这艘船到达的时间 tit_iti​ (单位:秒),船上的乘客数 kik_iki​,以及每名乘客的国籍 xi,1,xi,2,…,xi,kx_{i,1}, x_{i,2},\dots,x_{i,k}xi,1​,xi,2​,…,xi,k​。

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

形式化地讲,你需要计算 nnn 条信息。对于输出的第 iii 条信息,你需要统计满足 ti−86400<tp≤tit_i-86400<t_p \le t_iti​−86400<tp​≤ti​ 的船只 ppp,在所有的 xp,jx_{p,j}xp,j​ 中,总共有多少个不同的数。

输入格式

第一行输入一个正整数 nnn,表示小 K 统计了 nnn 艘船的信息。

接下来 nnn 行,每行描述一艘船的信息:前两个整数 tit_iti​ 和 kik_iki​ 分别表示这艘船到达海港的时间和船上的乘客数量,接下来 kik_iki​ 个整数 xi,jx_{i,j}xi,j​ 表示船上乘客的国籍。

保证输入的 tit_iti​ 是递增的,单位是秒;表示从小K第一次上班开始计时,这艘船在第 tit_iti​ 秒到达海港。

保证 1≤n≤105,∑ki≤3×105,1≤xi,j≤105,1≤ti≤1091 \leq n \leq 10^5,\sum k_i \leq 3\times 10^5, 1 \leq x_{i,j} \leq 10^5,1\leq t_i \leq 10^91≤n≤105,∑ki​≤3×105,1≤xi,j​≤105,1≤ti​≤109

其中 ∑ki\sum{k_i}∑ki​ 表示所有的 kik_iki​ 的和。

输出格式

输出 nnn 行,第 iii 行输出一个整数表示第 iii 艘船到达后的统计信息。

样例 #1

样例输入 #1

3
1 4 4 1 2 2
2 2 2 3
10 1 3

样例输出 #1

3
4
4

样例 #2

样例输入 #2

4
1 4 1 2 2 3
3 2 2 3
86401 2 3 4
86402 1 5

样例输出 #2

3
3
3
4
解题思路

下面的代码是我一开始写的严重超时了!
原因就是在计算ans:我先将超过24h的船的国籍从存储所有人的国籍的栈中拿出,然后在从更新后的栈头开始遍历到栈尾,可能循环3∗1010

for(int i = 0; i < k; i ++){cin >> x;q[++ t] = x;}while(h <= t && (ti - tq[hh] >= T)){for(int i = 0; i < kq[hh]; i ++)    h ++;hh ++;}ans = 0;int a[N] = {0};for(int i = h; i <= t; i ++){if( !a[q[i]] )  ans ++;a[q[i]] ++;}

改进:每次输入一只船的信息时,就将每个人的国籍出现次数加到a[国籍]++中,当有超过24h的情况时就将那个时间tq[ ]的人的a[国籍]- -
代码如下:

#include<bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;
const int M = 3e5 + 10;
const int T = 86400;//栈:q[]:存all船上all人的国籍、tq[]:每只船到达时间、kq[]:每只船的人数
//数组:a[]:存入每种国籍出现次数
int q[M], tq[N], kq[N], a[M];
int n, ti, k, x, ans, hh, tt, h, t;void init()
{hh = h = 0;     //栈tq、kq的头和尾tt = t = -1;    //栈q的头和尾
}
int main()
{cin >> n;init();while(n -- ){cin >> ti >> k;tq[++ tt] = ti, kq[tt] = k; //注:此处tt加一次就可以//输入每个人的国籍并存入q[]中,同时通过数组a[]记录该船的人国籍出现次数for(int i = 0; i < k; i ++) {cin >> x;q[++ t] = x;if(!a[x])  ans ++;a[x] ++;}//从q[]zhong删除满足(ti - tq[hh])大于等于24h的tq[]的人的国籍while(h <= t && (ti - tq[hh] >= T)){while(kq[hh] -- )if(!--a[q[h ++]])    ans --;hh ++;}cout << ans << endl;}return 0;
}

下面这个代码是我题解里面看到的,值得学习

#include<iostream>
using namespace std;
int s,i,n,t,k,r,w[100001],x[300002],y[300002];main(){cin>>n;while(n--){cin>>t>>k;while(k--){y[++r]=t;cin>>x[r];if(!w[x[r]])s++;w[x[r]]++;}while(t-y[i]>=86400)if(!--w[x[i++]])s--;cout<<s<<endl;}
}

[NOIP2016 普及组] 海港相关推荐

  1. P2058 [NOIP2016 普及组] 海港

    题目背景 NOIP2016 普及组 T3 题目描述 小 K 是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小 K 对这些到达海港的船只非常感兴趣,他按照时间记 ...

  2. 2021-09-18P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布P2058 [NOIP2016 普及组] 海港

    题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第8集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...

  3. 洛谷P2058 [NOIP2016 普及组] 海港

    模拟题,刚开始准备对每个船用队列进行储存,但是等船离开时每次都会遍历一遍这条船,时间复杂度为o(mn).所以应该存每个人 #include<bits/stdc++.h>using name ...

  4. NOIP2016普及组复赛第一题的AC程序加题解pascal

    P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔.商店不允许 ...

  5. 洛谷——P1909 [NOIP2016 普及组] 买铅笔

    P1909 [NOIP2016 普及组] 买铅笔 题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不 ...

  6. P1909 [NOIP2016 普及组] 买铅笔

    P1909 [NOIP2016 普及组] 买铅笔 提交308.01k 通过130.89k 时间限制1.00s 内存限制125.00MB 提交答案加入题单复制题目 做题计划(首页) 个人题单 团队题单 ...

  7. NOIP2016 普及组 总结+题目吐槽+代码+简单题解

    提高组回来之后,像往年一样,做了一下普及组的题 先吐槽一下 T1 这题一眼看上去以为可以用不同种类的铅笔,没想到只能用一种种类,我240B搞定 #include<cstdio> int m ...

  8. [NOIP2016 普及组] 买铅笔

    [NOIP2016 普及组] 买铅笔 题目背景 NOIP2016 普及组 T1 题目描述 P 老师需要去商店买 nnn 支铅笔作为小朋友们参加 NOIP 的礼物.她发现商店一共有 333 种包装的铅笔 ...

  9. 【做题记录】[NOIP2016 普及组] 魔法阵

    P2119 魔法阵 2016年普及组T4 题意: 给定一系列元素 \(\{X_i\}\) ,求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 . \[\begin{cases}X_ ...

  10. noip2016普及组初赛中山市成绩表及分数线

    广东中山初赛分数线63分~ 2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组)   排名 姓名 性别 学校 年级 参赛语种 指导教师 成绩 1 徐熠伟 男 中山市中山纪念中学 初一 pasca ...

最新文章

  1. div渐变遮罩效果:纵向和水平反向渐变遮罩效果,让戛然而止的页面多一丝丝淡淡的过渡效果,温柔中透露着一缕缕优雅...
  2. bayer格式插值算法实现
  3. linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...
  4. Error: EACCES: permission denied, symlink
  5. 白话Elasticsearch16-深度探秘搜索技术之使用原生cross-fiedls技术解决搜索弊端
  6. PhpStorm 对 AngularJS 的支持
  7. linux-shell命令之date【显示/设置系统日期/时间】
  8. python pil_python PIL 图像处理
  9. Unity2019.2中文更新日志速览版
  10. 黯然推荐:王江民先生悼文(文言)
  11. CAN学习笔记之15765-2协议摘要
  12. 腾讯云,搭建Git服务器
  13. win7连接远程服务器特别慢,win7远程桌面连接速度慢的问题如何解决
  14. 计算机一级学科博士点的双非大学,2021年这些工学各学科,实力强劲的双非大学,强力推荐学生报考...
  15. 第一章 语音信号处理概述
  16. 强大的 Fresco(加载网络和本地图片)简单使用
  17. 一招教你学会如何用excel求重复项最大值
  18. Unix File Permissions ACLs in OS X(part 2)
  19. css3橙色球形_CSS3橙色的星球绕轨道公转动画_html/css_WEB-ITnose -
  20. YOLO V6系列(一) -- 跑通YOLO V6算法

热门文章

  1. FileZilla中文乱码解决方法
  2. ODIN SNN处理器
  3. 免费下载 客道巴巴文档 教程
  4. 人工智能系列:AI 赋能平台
  5. 如何用Directshow采集摄像头图像
  6. 欧姆龙NJ 中大型PLC高端型搭载欧姆龙NB触摸屏
  7. 【全网最实用】最常用Windows快捷键和Windows命令整理
  8. ubuntu18.04安装中文输入法ibus
  9. 量子力学对计算机影响,人们对量子力学的理解有误?
  10. 手机测试SD卡读写速度的软件,手机存储SD卡读写测试:Cross Platfrom Disk Test