太坎坷了,题读错了
1⃣️1、prime表示是质数,不是1,首要的(第一)才能拿小黄鸭
2⃣️并不会因为ranklist中的id不存在而让后边的排序上升,想复杂了,因此下边的代码没必要
for(int i=0;i<n2;i++)
{
cin>>idlist[i];
isexist[idlist[i]]=1;
}
for(int i=0;i<n1;i++){
rankhash[ranklist[i]]=sum;
sum=sum+isexist[ranklist[i]];
}
3⃣️排名是从1开始的,这么看来,题目前面的序号单纯是条件编号,不是名次为0,为1,,
#include<bits/stdc++.h>
using namespace std;
int rankhash[10001]={-1},checkhash[10001]={0},isexist[10001]={0};
int idlist[10001];
bool isprime(int n)
{
if(n<=1) return false;
int s=(int)sqrt(n*1.0);
for(int i=2;i<=s;i++)
{
if(n%i==0)
return false;
}
return true;
}
int main(){
int n1,n2,sum=0;
cin>>n1;
fill(rankhash,rankhash+10001,-1);
for(int i=0;i<n1;i++){
int temp;
cin>>temp;
rankhash[temp]=i;
}
cin>>n2;
for(int i=0;i<n2;i++){
cin>>idlist[i];
}
for(int i=0;i<n2;i++){
if(checkhash[idlist[i]]==1)
printf("%04d: Checked\n",idlist[i]);
else{
if(rankhash[idlist[i]]==0)
{
printf("%04d: Mystery Award\n",idlist[i]);
checkhash[idlist[i]]=1;
}
else if(isprime(rankhash[idlist[i]]+1))
{
printf("%04d: Minion\n",idlist[i]);
checkhash[idlist[i]]=1;
}
else if(rankhash[idlist[i]]==-1)
printf("%04d: Are you kidding?\n",idlist[i]);
else{
printf("%04d: Chocolate\n",idlist[i]);
checkhash[idlist[i]]=1;
}
}
}
return 0;
}