题目翻译:
给定排名列表,第一名输出“Mystery Award”,素数排名输出“Minion”,其余输出“Chocolate”,然后给定查询列表,如果之前已经被查询过,就输出“Checked”,没有在列表中则输出“Are you kidding?”。
题解思路:
模拟即可
代码:
#include<bits/stdc++.h>
using namespace std;
struct node {
string award;
bool vis = 0;
};
int N, K;
vector<node> v(10000);
bool isPrime(int n)
{
if (n == 1) return false;
for (int i = 2;i <= sqrt(n);i++)
if (!(n % i)) return false;
return true;
}
int main()
{
cin >> N;
int temp;
for (int i = 0;i < N;i++)
{
cin >> temp;
if (i == 0)
v[temp].award = "Mystery Award";
else if (isPrime(i + 1))
v[temp].award = "Minion";
else
v[temp].award = "Chocolate";
}
cin >> K;
for (int i = 0;i < K;i++)
{
cin >> temp;
if (v[temp].vis == 0)
{
if (v[temp].award == "")
cout << setw(4) << setfill('0') << temp << ": Are you kidding?" << endl;
else
{
cout << setw(4) << setfill('0') << temp << ": " << v[temp].award << endl;
v[temp].vis = 1;
}
}
else
cout << setw(4) << setfill('0') << temp << ": Checked" << endl;
}
}
坑点:
无