用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?\n", id); 25 else if(check[id] == 1) printf("%04d: Checked\n", id); 26 else if(it->second == 1){ 27 printf("%04d: Mystery Award\n", id); 28 check[id] = 1; 29 }else if(isPrime(it->second)){ 30 printf("%04d: Minion\n", id); 31 check[id] = 1; 32 }else{ 33 printf("%04d: Chocolate\n", id); 34 check[id] = 1; 35 } 36 } 37 return 0; 38 }