[NOIP2016 普及组] 海港
[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 普及组] 海港相关推荐
- P2058 [NOIP2016 普及组] 海港
题目背景 NOIP2016 普及组 T3 题目描述 小 K 是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小 K 对这些到达海港的船只非常感兴趣,他按照时间记 ...
- 2021-09-18P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布P2058 [NOIP2016 普及组] 海港
题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第8集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...
- 洛谷P2058 [NOIP2016 普及组] 海港
模拟题,刚开始准备对每个船用队列进行储存,但是等船离开时每次都会遍历一遍这条船,时间复杂度为o(mn).所以应该存每个人 #include<bits/stdc++.h>using name ...
- NOIP2016普及组复赛第一题的AC程序加题解pascal
P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔.商店不允许 ...
- 洛谷——P1909 [NOIP2016 普及组] 买铅笔
P1909 [NOIP2016 普及组] 买铅笔 题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不 ...
- P1909 [NOIP2016 普及组] 买铅笔
P1909 [NOIP2016 普及组] 买铅笔 提交308.01k 通过130.89k 时间限制1.00s 内存限制125.00MB 提交答案加入题单复制题目 做题计划(首页) 个人题单 团队题单 ...
- NOIP2016 普及组 总结+题目吐槽+代码+简单题解
提高组回来之后,像往年一样,做了一下普及组的题 先吐槽一下 T1 这题一眼看上去以为可以用不同种类的铅笔,没想到只能用一种种类,我240B搞定 #include<cstdio> int m ...
- [NOIP2016 普及组] 买铅笔
[NOIP2016 普及组] 买铅笔 题目背景 NOIP2016 普及组 T1 题目描述 P 老师需要去商店买 nnn 支铅笔作为小朋友们参加 NOIP 的礼物.她发现商店一共有 333 种包装的铅笔 ...
- 【做题记录】[NOIP2016 普及组] 魔法阵
P2119 魔法阵 2016年普及组T4 题意: 给定一系列元素 \(\{X_i\}\) ,求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 . \[\begin{cases}X_ ...
- noip2016普及组初赛中山市成绩表及分数线
广东中山初赛分数线63分~ 2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组) 排名 姓名 性别 学校 年级 参赛语种 指导教师 成绩 1 徐熠伟 男 中山市中山纪念中学 初一 pasca ...
最新文章
- div渐变遮罩效果:纵向和水平反向渐变遮罩效果,让戛然而止的页面多一丝丝淡淡的过渡效果,温柔中透露着一缕缕优雅...
- bayer格式插值算法实现
- linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...
- Error: EACCES: permission denied, symlink
- 白话Elasticsearch16-深度探秘搜索技术之使用原生cross-fiedls技术解决搜索弊端
- PhpStorm 对 AngularJS 的支持
- linux-shell命令之date【显示/设置系统日期/时间】
- python pil_python PIL 图像处理
- Unity2019.2中文更新日志速览版
- 黯然推荐:王江民先生悼文(文言)
- CAN学习笔记之15765-2协议摘要
- 腾讯云,搭建Git服务器
- win7连接远程服务器特别慢,win7远程桌面连接速度慢的问题如何解决
- 计算机一级学科博士点的双非大学,2021年这些工学各学科,实力强劲的双非大学,强力推荐学生报考...
- 第一章 语音信号处理概述
- 强大的 Fresco(加载网络和本地图片)简单使用
- 一招教你学会如何用excel求重复项最大值
- Unix File Permissions ACLs in OS X(part 2)
- css3橙色球形_CSS3橙色的星球绕轨道公转动画_html/css_WEB-ITnose -
- YOLO V6系列(一) -- 跑通YOLO V6算法