思路:模拟一下就好了,map用来记录每个人的排名。
AC代码
#include <stdio.h> #include <map> #include <math.h> #include <string> #include <string.h> using namespace std; map<string, int> Rank; map<string, int> asked; const int maxn = 10000+5; bool vis[maxn]; void init(int n) { int m = sqrt(n+0.5); memset(vis, 0, sizeof(vis)); for(int i = 2; i <= m; i++) if(!vis[i]) for(int j = i*i; j <= n; j+=i) vis[j] = 1; } int main() { init(maxn); char s[10]; int n, k; scanf("%d", &n); for(int i = 0; i < n; i++) { scanf("%s", s); Rank[s] = i+1; } scanf("%d", &k); for(int i = 0; i < k; i++) { scanf("%s", s); if(asked.count(s)) { printf("%s: Checked\n", s); continue; } if(!Rank.count(s)) { printf("%s: Are you kidding?\n", s); } else { asked[s] = 1; int id = Rank[s]; if(id == 1) { printf("%s: Mystery Award\n", s); } else if(!vis[id]) { printf("%s: Minion\n", s); } else { printf("%s: Chocolate\n", s); } } } return 0; }如有不当之处欢迎指出!