UVA-12118 检查员的难题 题解答案代码 算法竞赛入门经典第二版
发布人:shili8
发布时间:2024-12-23 11:51
阅读次数:0
**UVA-12118 检查员的难题**
**题目描述**
检查员的难题是这样子的:有n个学生,分别代表着不同的国家。每个学生都有一张卡片,上面写着他们的名字和一个数字。检查员要找出哪些学生的卡片上的数字之和等于0。
**输入输出格式**
输入:
* n(学生人数)
* 卡片上数字的值(每行一个)
输出:
* 检查员发现的学生们的名字**题解**
这个问题可以使用哈希表来解决。我们先将所有卡片上的数字存入哈希表中,然后遍历哈希表,找出哪些数字之和等于0。
cpp#include <iostream> #include <map> using namespace std; int main() { int n; cin >> n; map<int, int> mp; for (int i =1; i <= n; ++i) { int x; cin >> x; if (mp.find(x) != mp.end()) { mp[x]++; } else { mp[x] =1; } } bool flag = false; for (auto it = mp.begin(); it != mp.end(); ++it) { int sum =0; for (int j = -100; j <=100; ++j) { if (mp.find(j + it->first) != mp.end()) { sum += mp[j + it->first]; } } if (sum == n && !flag) { flag = true; cout << "YES" << endl; for (auto it2 = mp.begin(); it2 != mp.end(); ++it2) { int x =0; for (int j = -100; j <=100; ++j) { if (mp.find(j + it->first) != mp.end()) { x += j * mp[j + it->first]; } } if (x ==0) { cout << it2->second << " "; } } } } return0; }
**算法**
1. 将所有卡片上的数字存入哈希表中。
2. 遍历哈希表,找出哪些数字之和等于0。
**时间复杂度**
O(n)
**空间复杂度**
O(n)
**注意事项**
* 这个问题需要使用哈希表来解决。
* 需要遍历哈希表找到哪些数字之和等于0。