题意
举行了比赛,冠军有神秘奖,名次是素数的人会收到小黄人,其他的任何人会收到巧克力,不在名单里的人也要检查出来,还要识别出已经检查过的人
思路
- 分别用2个
unordered_map<int, int>
来记住排名和是否有在名单里 - 接下来依次判断即可
代码
#include <iostream>
#include <vector>
#include <queue>
#include <map>
#include <string.h>
#include <set>
#include <unordered_map>
#include <algorithm>
using namespace std;
unordered_map<int, int> ranklist;
unordered_map<int, int> namelist;
bool is_prime(int x) {
if(x <= 1) return false;
for(int i = 2; i * i <= x; i++) {
if(x % i == 0) return false;
}
return true;
}
int main() {
int N, K, tmp;
cin >> N;
for(int i = 1; i <= N; i++) {
cin >> tmp;
ranklist[tmp] = i;
namelist[tmp] = 1;
}
cin >> K;
bool checked[10001] = {0};
for(int i = 0; i < K; i++) {
cin >> tmp;
if(namelist[tmp] == 0) // 不在名单上
printf("%04d: Are you kidding?
", tmp);
else if(checked[tmp]) // 已经检查过了
printf("%04d: Checked
", tmp);
else {
checked[tmp] = true;
if(ranklist[tmp] == 1) // 第一名
printf("%04d: Mystery Award
", tmp);
else if(is_prime(ranklist[tmp])) // 名次为素数
printf("%04d: Minion
", tmp);
else
printf("%04d: Chocolate
", tmp); // 巧克力
}
}
return 0;
}