注意这个题目要用多个map去hash才能保证正确 慢慢来就好了
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
struct node
{
string name;
int rank;
}Node[MAXN];
map<string,int> happen;
map<string,int> ranklist;
bool is_prime(int n)
{
if(n <= 1)
{
return false;
}
else
{
for(int i = 2; i * i <= n;i++)
{
if(n % i == 0)
{
return false;
}
}
}
return true;
}
map<string,bool> check;
int main(void)
{
freopen("pat0314/in.txt","r",stdin);
int n;
cin>>n;
for(int i = 0;i<n;i++)
{
string id;
cin>>id;
Node[i].name = id;
Node[i].rank = i + 1;
happen[id] = 1;
ranklist[id] = i + 1;
}
int q;
cin>>q;
for(int i = 0;i< q;i++)
{
string name;
cin>>name;
if(check[name] == false)
{
if(happen[name] == 0)
cout<<name<<": Are you kidding?"<<endl;
else
if(ranklist[name] == 1)
{
printf("%s: Mystery Award\n",name.c_str());
}
else if(is_prime(ranklist[name]))
{
printf("%s: Minion\n",name.c_str());
}
else
{
printf("%s: Chocolate\n",name.c_str());
}
check[name] = true;
}
else
{
if(happen[name] == 1)
printf("%s: Checked\n",name.c_str());
else
cout<<name<<": Are you kidding?"<<endl;
}
}
return 0;
}```