PAT(Advanced) 1116 Come on! Let’s C C++实现
题目链接
题目大意
给定ID和排名,考虑四种情况:排名第一、排名为质数、排名非质数且非第一、没有进入排名,根据这四种情况对查询进行输出,若对同一ID查询超过一次则输出已查询。
算法思路
借助C++ STL
容器unordered_map
存放ID
和排名映射,容器unordered_set
存放已经查询的ID
。
AC代码
/*
author : eclipse
email : eclipsecs@qq.com
time : Wed Feb 03 10:29:05 2021
*/
#include <bits/stdc++.h>
using namespace std;
bool prime(int number) {
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
int main(int argc, char const *argv[]) {
int N, K;
scanf("%d", &N);
unordered_map<int, int> rank;
for (int i = 0; i < N; i++) {
int ID;
scanf("%d", &ID);
rank[ID] = i + 1;
}
unordered_set<int> checked;
scanf("%d", &K);
for (int i = 0; i < K; i++) {
int ID;
scanf("%d", &ID);
if (!checked.count(ID)) {
if (rank.count(ID)) {
if (rank[ID] == 1) {
printf("%04d: Mystery Award\n", ID);
} else {
printf("%04d: %s\n", ID, prime(rank[ID]) ? "Minion" : "Chocolate");
}
checked.insert(ID);
} else {
printf("%04d: Are you kidding?\n", ID);
}
} else {
printf("%04d: Checked\n", ID);
}
}
return 0;
}
样例输入
6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222
样例输出
8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?
鸣谢
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!