1284 海港 队列 模拟
思路解释
- 使用 queue 来存储每艘船的到达时间和乘客国籍信息。
- 使用数组 a 来记录每个国籍的乘客数量。
- 读取船只数量 n。
- 对于每艘船,读取其到达时间 t 和乘客数量 k,然后读取每个乘客的国籍 x。
- 如果某个国籍的乘客数量为0,表示这是一个新国籍,增加不同国籍计数 ans。
- 将当前乘客信息加入队列 q。
- 检查队列中的船只,如果其到达时间超过当前时间 t 的24小时(86400秒),则从队列中移除,并更新国籍乘客数量。
- 对于每艘船,输出当前时间点的不同国籍乘客数量 ans。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 3e5+10; struct node { int t, x; }; queue<node> q; // 用于存储船只到达时间和乘客国籍的队列 int a[N]; // 用于记录每个国籍的乘客数量 int n, k, x, t, ans; // n: 船只数量, k: 当前船的乘客数量, x: 乘客国籍, t: 当前时间, ans: 不同国籍的乘客数量 node r; // 临时变量,用于存储当前处理的船只信息 int main() { scanf("%d", &n); // 读取船只数量 for (int i = 1; i <= n; i++) { scanf("%d %d", &r.t, &k); // 读取当前船只到达时间和乘客数量 t = r.t; // 更新当前时间 for (int j = 1; j <= k; j++) { scanf("%d", &r.x); // 读取每个乘客的国籍 if (!a[r.x]) ans++; // 如果该国籍的乘客数量为0,表示是新国籍,增加不同国籍计数 a[r.x]++; // 增加该国籍的乘客数量 q.push(r); // 将当前乘客信息加入队列 } r = q.front(); // 获取队列中的第一个元素 // 移除超过24小时(86400秒)前到达的船只的乘客 while (!q.empty() && t - r.t >= 86400) { q.pop(); // 移除队列中的第一个元素 a[r.x]--; // 减少该国籍的乘客数量 if (!a[r.x]) ans--; // 如果该国籍的乘客数量为0,减少不同国籍计数 if (!q.empty()) r = q.front(); // 更新队列中的第一个元素 } cout << ans << endl; // 输出当前时间点的不同国籍乘客数量 } return 0; }
#include<bits/stdc++.h> #define ll long long using namespace std; const int N = 1e3+10; struct node{ int t,gj; //时间,国籍 }; int n,ans; //ans当前岛上的国籍数 int vis[N]; //vis[i]:国籍i的人数 queue<node> q; //酒店队列 int main() { cin >> n; //n艘船 for(int i = 1; i <= n; i++) { int t,k; //第i艘船t时间到达,船上k个人 cin >> t >> k; for(int j = 1; j <= k; j++) { int x; cin >> x; //每个人的国籍 q.push({t,x}); vis[x]++; //x的国籍数+1 if(vis[x] == 1) ans++; } //输出每艘船到达的时候国籍种类数 while(t - q.front().t >= 86400) { int x = q.front().gj; vis[x]--; //国籍x的人减少 if(vis[x] == 0) ans--; //某个国籍的人数彻底没了 q.pop(); } cout << ans << endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
2022-09-30 TZOJ 3692: 紧急援救 最短路/dijstra