当前位置: 首页 > news >正文

题解:洛谷 P2058 [NOIP 2016 普及组] 海港

【题目来源】

洛谷:[P2058 NOIP 2016 普及组] 海港 - 洛谷

【题目描述】

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

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

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

形式化地讲,你需要计算 \(n\) 条信息。对于输出的第 \(i\) 条信息,你需要统计满足 \(t_i-86400\lt t_p\le 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\le n\le 10^5, \sum k_i\le3\times 10^5, 1\le x_{i,j}\le 10^5, 1\le t_{i-1}\le t_i\le 10^9\)

其中\(\sum k_i\)表示所有的\(k_i\)的和。

【输出】

输出 \(n\) 行,第 \(i\) 行输出一个整数表示第 \(i\) 艘船到达后的统计信息。

【输入样例】

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

【输出样例】

3
4
4

【算法标签】

《洛谷 P2058 海港》 #模拟# #NOIP普及组# #2016#

【代码详解】

#include <bits/stdc++.h>
#include <queue>
using namespace std;// 定义人的结构体,包含时间t和编号x
struct people {int t, x;
};// 全局变量
int ct[100005] = {0};  // ct[x]记录编号为x的人当前出现的次数
int n, t, k, tmp, ans = 0;  // n:总人数,t:时间,k:人数,tmp:临时变量,ans:当前不同人数int main()
{// 使用队列存储人,按时间顺序先进先出queue<people> q;people p;// 输入总人数ncin >> n;// 处理每个时间点的情况for (int i = 0; i < n; i++) {// 输入当前时间t和人数kcin >> t >> k;// 处理这k个人for (int j = 0; j < k; j++) {cin >> tmp;  // 输入人的编号if (ct[tmp] == 0) ans++;  // 如果是新出现的人,增加计数ct[tmp]++;  // 记录该编号出现次数q.push((people){t, tmp});  // 将人加入队列}// 检查队列前端的人是否已经超过24小时(86400秒)p = q.front();while (t - p.t >= 86400) {ct[p.x]--;  // 减少该编号的计数if (ct[p.x] == 0) ans--;  // 如果计数归零,减少不同人数计数q.pop();  // 移除超时的人if (!q.empty()) p = q.front();  // 检查队列是否为空else break;}// 输出当前的不同人数cout << ans << endl;}return 0;
}

【运行结果】

3
1 4 4 1 2 2
3
2 2 2 3
4
10 1 3 
4
http://www.jsqmd.com/news/390160/

相关文章:

  • Shell printf 命令
  • 题解:洛谷 P1996 约瑟夫问题
  • Mac mini 带回老家,打算用远程控制,第一次开机我傻眼了
  • 2026硅酸钾领域佼佼者:盘点几家实力企业,硅微粉/石英粉/铸石粉/石英砂/石墨粉/玻璃纤维布,硅酸钾生产厂家哪家好 - 品牌推荐师
  • AI率失真:为什么你永远测不出一段文字是不是AI写的
  • 2026年专业的保健品品牌选哪家?看这篇就懂,保健品/保健饮品/养胃颗粒,保健品品牌选哪家 - 品牌推荐师
  • 2026市面上热门不锈钢筛网公司,哪个更胜一筹?混合机/旋振筛/真空上料机/不锈钢筛网,不锈钢筛网实力厂家排行榜 - 品牌推荐师
  • 2026靠谱的郭氏正骨在哪?排行榜为你揭秘,郭氏正骨,郭氏正骨生产厂家哪个好 - 品牌推荐师
  • MySQL大表DDL的最佳实践 - 详解
  • 抗衰老保健品怎么选?2026年热门口碑产品推荐,保健品/抗衰老片,抗衰老保健品食品推荐排行榜 - 品牌推荐师
  • 江苏车铣复合培训择校攻略:聚焦学校口碑与实力,SolidWorks培训/非标机械设计培训,车铣复合培训机构推荐排行榜 - 品牌推荐师
  • 我发明的 C++「数据注入模型(DWM)」:比构造函数更规范、更专业的结构体创建写法
  • 题解:洛谷 P1449 后缀表达式
  • 【GitHub项目推荐--OpenAkita:自我进化的开源AI助手框架】⭐⭐⭐
  • Java8 有哪些新特性?
  • 【GitHub项目推荐--ZeroClaw:零开销、零妥协的Rust原生AI助手基础设施】⭐⭐⭐
  • Java 方法重载和方法重写之间的区别是什么?
  • 什么是 Java 内部类?它有什么作用?
  • Java 面向对象编程与面向过程编程的区别是什么?
  • sdut-Java面向对象-05 类和对象(函数题:12-22题)完整教程:从入门到实战部署
  • 深入理解AVL树:从概念到完整C++实现详解 - 教程
  • 想选专业保健品品牌?2026年这些值得关注!保健饮品/养胃颗粒/保健品,保健品品牌推荐排行榜 - 品牌推荐师
  • 校园失物招领|基于Python + Django校园失物招领系统(源码+数据库+文档)
  • 想选江苏口碑好的车铣复合培训职校?2026年选择攻略来了,车铣复合培训/非标机械设计培训,车铣复合培训职业学校口碑排行 - 品牌推荐师
  • 学生信息管理|基于Python + Django学生信息管理系统(源码+数据库+文档)
  • 题解:洛谷 P1825 [USACO11OPEN] Corn Maze S
  • 仓库管理|基于Python + Django仓库管理系统(源码+数据库+文档)
  • 智慧社区|基于Python + Django智慧社区系统(源码+数据库+文档)
  • 从大模型到场景应用如何破解AI“最后一公里”难题?
  • 酒店客房管理|基于Python + Django酒店客房管理系统(源码+数据库+文档)