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。

