题目粗心
给定一个长度为 N 的排名列表和长度为 K 的查问列表, 须要你依照如下规定输入每一个查问的后果.
- 1、排名第一的取得 Mystery Award 奖品
- 2、排名为素数的取得 Minion 奖品
- 3、所有其余加入较量的人均取得 Chocolate 奖品
- 4、对于非法查问输入 Are you kidding?
- 5、对于反复查问输入 Checked
算法思路
依照规定模仿即可,应用 valid 数组记录非法的输出,Rank 记录每一个人的排名,checked 数组记录曾经查问的记录,对于每一次查问,首先判断是否非法,如果非法再判断是否曾经查问过,如果没有,就依照 1,2,3 规定进行查问即可,最初得将 checked[query] 置为 true
提交后果
AC 代码
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int valid[10000];
int checked[10000];
int Rank[10000];
bool isPrime(int x){if(n<=1) return false;
int n = (int)sqrt(x*1.0);
for(int i=2;i<=n;++i){if(x%i==0){return false;}
}
return true;
}
int main() {
int n;
scanf("%d",&n);
vector<int> v(n);
for(int i=0;i<n;++i){scanf("%d",&v[i]);
valid[v[i]] = true;
Rank[v[i]] = i+1;
}
int k;
scanf("%d",&k);
for(int i=0;i<k;++i){
int query;
scanf("%d",&query);
if(!valid[query]){printf("%04d: Are you kidding?\n",query);
}else{if(checked[query]){printf("%04d: Checked\n",query);
}else if(query==v[0]){printf("%04d: Mystery Award\n",query);
}else if(isPrime(Rank[query])){printf("%04d: Minion\n",query);
}else{printf("%04d: Chocolate\n",query);
}
checked[query] = true;
}
}
return 0;
}