题目链接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;
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐