题目粗心
给定一个长度为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;}