当前位置: 代码迷 >> 综合 >> 个人练习-PAT甲级-1116 Come on Let‘s C
  详细解决方案

个人练习-PAT甲级-1116 Come on Let‘s C

热度:9   发布时间:2023-12-21 11:08:07.0

题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805355358306304

题目大意:按排名给出一串ID,然后在给出一串ID,求其排名对应的奖励。如果一个query合法并且已经输出过,要说checked

思路:正常做,注意排名是从1开始排的即可。

完整代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <set>using namespace std;int ranklist[10001];
bool known[10001];bool isPrime(int num) {
    if (num == 1)return false;if (num == 2 || num == 3)return true;for (int i = 2; i <= (int)(sqrt(num)); i++) {
    if (num % i == 0)return false;}return true;
}void award(int q) {
    printf("%04d: ", q);if (known[q]) {
    printf("Checked\n");return;}int r = ranklist[q];if (r == -1)printf("Are you kidding?\n");else if (r == 1) {
    printf("Mystery Award\n");known[q] = true;}else if (isPrime(r)){
    printf("Minion\n");known[q] = true;}else {
    printf("Chocolate\n");known[q] = true;}
}int main() {
    fill(ranklist, ranklist+10000, -1);int N, K;scanf("%d", &N);for (int r = 1; r <= N; r++) {
    int id;scanf("%d", &id);ranklist[id] = r;}scanf("%d", &K);for (int i = 0; i < K; i++) {
    int query;scanf("%d", &query);award(query);}return 0;
}