【算法笔记】B1059 C语言竞赛

用map存排名,再定义一个数组存是否领过奖品。测试点2出错原因找了好久,发现是最后一种情况忘了把check[id]置1

还是得细心啊

code:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 10010;
 4 map<int, int> id_list;
 5 int check[maxn] = {0};
 6 bool isPrime(int n){
 7     if(n <= 3) return n > 1;
 8     for (int i = 2; i <= sqrt(n); i++){
 9         if(n % i == 0) return false;
10     }
11     return true;
12 }
13 int main(){
14     int n, id, k;
15     scanf("%d", &n);
16     for(int i = 0; i < n; i++){
17         scanf("%d", &id);
18         id_list[id] = i + 1;
19     }
20     cin>>k;
21     for(int i = 0; i < k; i++){
22         scanf("%d", &id);
23         map<int, int>::iterator it = id_list.find(id);
24         if(it == id_list.end()) printf("%04d: Are you kidding?
", id);
25         else if(check[id] == 1) printf("%04d: Checked
", id);
26         else if(it->second == 1){
27             printf("%04d: Mystery Award
", id);
28             check[id] = 1;
29         }else if(isPrime(it->second)){
30             printf("%04d: Minion
", id);
31             check[id] = 1;
32         }else{
33             printf("%04d: Chocolate
", id);
34             check[id] = 1;
35         }
36     }
37     return 0;
38 }
原文地址:https://www.cnblogs.com/chunlinn/p/10842887.html