题目
思路
使用map<int,pair<int,bool>>进行hash,分别对应ID,排名,是否访问,查询即可
代码
#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;
unordered_map<int,pair<int,bool>> m;
bool isPrime(int& num) {
if (num <= 1)
return false;
int sqr = sqrt(1.0 * num);
for (int i = 2; i <= sqr; ++i) {
if (num % i == 0)
return false;
}
return true;
}
int main()
{
int n, qn;
cin >> n;
for (int i = 1; i <= n; ++i) {
int tmp; cin >> tmp;
m.insert(pair<int,pair<int,bool>>(tmp,pair<int,bool>(i,false)));
}
cin >> qn;
for (int i = 0; i < qn; ++i) {
int tmp; cin >> tmp;
auto p = m.find(tmp);
if (p == m.end()) {
printf("%04d: Are you kidding?\n", tmp);
}
else {
if (!p->second.second) {
if (p->second.first == 1)
printf("%04d: Mystery Award\n", tmp);
else if (isPrime(p->second.first))
printf("%04d: Minion\n", tmp);
else
printf("%04d: Chocolate\n", tmp);
p->second.second = true;
}
else
printf("%04d: Checked\n", tmp);
}
}
}