傳送門(mén)
https://pintia.cn/problem-sets/994805260223102976/problems/994805269828059136
題目
C語(yǔ)言競(jìng)賽是浙江大學(xué)計(jì)算機(jī)學(xué)院主持的一個(gè)歡樂(lè)的競(jìng)賽迅办。既然競(jìng)賽主旨是為了好玩,頒獎(jiǎng)規(guī)則也就制定得很滑稽:
0.冠軍將贏得一份“神秘大獎(jiǎng)”(比如很巨大的一本學(xué)生研究論文集……)章蚣。
1.排名為素?cái)?shù)的學(xué)生將贏得最好的獎(jiǎng)品 —— 小黃人玩偶站欺!
2.其他人將得到巧克力。
給定比賽的最終排名以及一系列參賽者的ID纤垂,你要給出這些參賽者應(yīng)該獲得的獎(jiǎng)品镊绪。
輸入格式:
輸入第一行給出一個(gè)正整數(shù)N(<=10000),是參賽者人數(shù)洒忧。隨后N行給出最終排名,每行按排名順序給出一位參賽者的ID(4位數(shù)字組成)够颠。接下來(lái)給出一個(gè)正整數(shù)K以及K個(gè)需要查詢的ID熙侍。
輸出格式:
對(duì)每個(gè)要查詢的ID,在一行中輸出“ID: 獎(jiǎng)品”履磨,其中獎(jiǎng)品或者是“Mystery Award”(神秘大獎(jiǎng))蛉抓、或者是“Minion”(小黃人)、或者是“Chocolate”(巧克力)剃诅。如果所查ID根本不在排名里巷送,打印“Are you kidding?”(耍我呢?)矛辕。如果該ID已經(jīng)查過(guò)了(即獎(jiǎng)品已經(jīng)領(lǐng)過(guò)了)笑跛,打印“ID: Checked”(不能多吃多占)付魔。
輸入樣例
6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222
輸出樣例:
8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?
分析
1.因?yàn)闀r(shí)間要求是200ms,素?cái)?shù)求到10000飞蹂,所以為防止超時(shí)几苍,還是先建立10000以內(nèi)的素?cái)?shù)表吧;
2.接著每次輸入陈哑,判斷會(huì)得什么獎(jiǎng)項(xiàng)妻坝,將對(duì)應(yīng)的獎(jiǎng)項(xiàng)編號(hào)存入得獎(jiǎng)結(jié)果的數(shù)組中;
3.根據(jù)輸入結(jié)果惊窖,查詢獎(jiǎng)項(xiàng)刽宪,若已查詢,則將獎(jiǎng)項(xiàng)編號(hào)置為-1界酒,便于之后輸出"Checked"圣拄。這里需要注意的是:若沒(méi)有查詢到結(jié)果,不要將其置為-1盾计,參照輸入樣例售担,查詢兩次2222,結(jié)果均是" Are you kidding?"署辉。
源代碼
//C/C++實(shí)現(xiàn)
#include <iostream>
using namespace std;
int award[10001];
int prime[10001];
int main(){
//create prime table
prime[1] = 1; //1不是素?cái)?shù)
for(int i = 2; i <= 5000; ++i){
for(int j = 2; i * j <= 10000; ++j){
prime[i * j] = 1; //1為非素?cái)?shù)
}
}
//input
int n;
scanf("%d", &n);
int tmp;
for(int i = 1; i <= n; ++i){
scanf("%d", &tmp);
if(i == 1){
award[tmp] = 1; //神秘大獎(jiǎng)
}
else{
if(prime[i] == 0){ // 是素?cái)?shù)
award[tmp] = 2; //小黃人
}
else{
award[tmp] = 3; //巧克力
}
}
}
int k;
scanf("%d", &k);
for(int i = 0; i < k; ++i){
scanf("%d", &tmp);
printf("%04d: ",tmp);
if(award[tmp] == 0){
printf("Are you kidding?\n");
}
else if(award[tmp] == 1){
printf("Mystery Award\n");
award[tmp] = -1; //已經(jīng)查詢過(guò)
}
else if(award[tmp] == 2){
printf("Minion\n");
award[tmp] = -1; //已經(jīng)查詢過(guò)
}
else if(award[tmp] == 3){
printf("Chocolate\n");
award[tmp] = -1; //已經(jīng)查詢過(guò)
}
else if(award[tmp] == -1){
printf("Checked\n");
}
}
return 0;
}