[NOIP2016 普及组] 海港 题解 - C++ 代码实现/n/n## 题目分析/n/n本题要求我们统计在每一艘船到达后,最近 24 小时内所有到达船只的乘客来自多少个不同的国家。我们可以使用一个数据结构来存储所有到达船只的乘客国籍,并利用这个数据结构统计不同的国家数量。/n/n## 解题思路/n/n我们可以使用 unordered/_set 数据结构来存储所有到达船只的乘客国籍。unordered/_set 的特点是:/n/n* 存储元素不重复/n* 元素无序/n* 查找元素效率高/n/n具体算法如下:/n/n1. 使用 unordered/_set 来存储所有到达船只的乘客国籍。/n2. 遍历每一艘船只的信息:/n * 遍历该船只之前到达的所有船只的信息,并将这些船只的乘客国籍添加到 unordered/_set 中。/n * 如果当前船只到达时间减去之前船只到达时间大于 86400 秒,则停止遍历之前船只信息。/n * 统计 unordered/_set 中元素的数量,即为当前船只到达后,最近 24 小时内所有到达船只的乘客来自的不同的国家数量。/n/n## C++ 代码实现/n/ncpp/n#include <iostream>/n#include <vector>/n#include <unordered_set>/nusing namespace std;/n/nint main() {/n int n;/n cin >> n;/n /n vector<int> t(n);/n vector<vector<int>> x(n);/n /n for (int i = 0; i < n; i++) {/n int k;/n cin >> t[i] >> k;/n x[i].resize(k);/n for (int j = 0; j < k; j++) {/n cin >> x[i][j];/n }/n }/n /n unordered_set<int> countries;/n /n for (int i = 0; i < n; i++) {/n for (int j = i; j >= 0; j--) {/n if (t[i] - t[j] > 86400) {/n break;/n }/n /n for (int k = 0; k < x[j].size(); k++) {/n countries.insert(x[j][k]);/n }/n }/n /n cout << countries.size() << endl;/n }/n /n return 0;/n}/n/n/n## 总结/n/n本题可以使用 unordered/_set 数据结构来高效地统计不同国家乘客的数量。通过遍历所有船只信息,并利用 unordered/_set 的特点,我们可以得到正确的答案。/n

NOIP2016 普及组 海港 题解 - C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/qtac 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录