1116 Come on! Let’s C (20 分)
题目大意
给出每个id的排名,请根据不同的排名,做出不同的输出。
基本思路
ran数组标记每个id对应的排名,集合ss存储所有已经询问过的id,如果发现当前id已经出现在ss中,则输出“Checked”,如果ran[id] == 0说明当前id不在排名列表中,所以输出“Are you kidding?”,如果ran[id]为1则输出“Minion”,如果ran[id]为素数则输出“Mystery Award”,否则输出“Chocolate”
代码
#include <bits/stdc++.h>
using namespace std;
int ran[10000];//下标为id,值为该id的排名
bool isprime(int n){
if(n<2) return false;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
int main(){
int n,k;
cin>>n;
//读入n个id,给每个id赋以排名
for (int i = 0; i < n; ++i) {
int id;
cin>>id;
ran[id]=i+1;
}
//读入k个id,根据不同的ran[id]--排名,输出不同的结果
//注意:没有排名的id和重复出现的id作特殊的输出
set<int> ss;
cin>>k;
while(k--){
int id;
cin>>id;
printf("%04d: ", id);
if(ran[id]==0){
cout<<"Are you kidding?"<<endl;
continue;
}
if(ss.find(id)==ss.end()){
ss.insert(id);
}else{
cout<<"Checked"<<endl;
continue;
}
if(ran[id]==1){
cout<<"Mystery Award"<<endl;
}else if(isprime(ran[id])){
cout<<"Minion"<<endl;
}else{
cout<<"Chocolate"<<endl;
}
}
}