1116 Come on! Let’s C (20 分)
-
题目大意:"Let’s C"比赛的获奖规则为:
- 冠军获得"Mystery Award"
- 排名为素数的参赛者获得"Minion"
- 其他人获得"Chocolate"
- 不在ranklist里的,输出"Are you kidding?"
-
思路:
- 用结构体存储每个参赛者的信息,用字符串存奖励;
- 用hash记录该参赛者是否在ranklist里(记录为1)、是否已经被check过(记录为2)
- 将参赛信息存入map中,方便查询
-
知识点:
- 结构体
- map
- hash
- 判断素数的方法
-
代码:
#include <iostream> #include <string> #include <vector> #include <cmath> #include <map> using namespace std; struct peo{ int id; string award; }; int hashtable[10002]; bool isPrime(int n){ if(n == 0 || n == 1) return false; for(int i = 2; i <= sqrt(n); i++){ if(n % i == 0) return false; } return true; } int main() { int n, k; scanf("%d", &n); vector<peo> v(n); map<int, peo> m; for(int i = 0; i < n; i++){ scanf("%d", &v[i].id); hashtable[v[i].id]++; if(i == 0) v[i].award = "Mystery Award"; else if(isPrime(i + 1)) v[i].award = "Minion"; else v[i].award = "Chocolate"; m[v[i].id] = v[i]; } scanf("%d", &k); for(int i = 0; i < k; i++){ int temp; scanf("%d", &temp); printf("%04d: ", temp); // 粗心:格式错误 if(hashtable[temp] == 0) printf("Are you kidding?\n"); else if(hashtable[temp] > 1) printf("Checked\n"); else{ cout << m[temp].award << endl; hashtable[temp]++; } } return 0; }
-
总结:
- 若要查询可将信息存入map中
- 粗心:输出格式错误