【PAT甲级 - C++题解】1116 Come on! Let‘s C

简介: 【PAT甲级 - C++题解】1116 Come on! Let‘s C

1116 Come on! Let’s C

“Let’s C” is a popular and fun programming contest hosted by the College of Computer Science and Technology, Zhejiang University. Since the idea of the contest is for fun, the award rules are funny as the following:


0、 The Champion will receive a “Mystery Award” (such as a BIG collection of students’ research papers…).

1、 Those who ranked as a prime number will receive the best award – the Minions (小黄人)!

2、 Everyone else will receive chocolates.

Given the final ranklist and a sequence of contestant ID’s, you are supposed to tell the corresponding awards.


Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤104), the total number of contestants. Then N lines of the ranklist follow, each in order gives a contestant’s ID (a 4-digit number). After the ranklist, there is a positive integer K followed by K query ID’s.


Output Specification:

For each query, print in a line ID: award where the award is Mystery Award, or Minion, or Chocolate. If the ID is not in the ranklist, print Are you kidding? instead. If the ID has been checked before, print ID: Checked.


Sample Input:

6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222


Sample Output:

8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?

题意

给定比赛的最终排名以及一系列参赛者的 ID ,你要给出这些参赛者应该获得的奖品,条件如下:

  1. 第一名获得一份神秘大礼 Mystery Award
  2. 排名是素数的获得小黄人玩偶 Minion
  3. 其他人获得巧克力 Chocolate


另外,还有一些限制条件:

  1. 如果查询的 ID 不在给定的排名中,则输出 Are you kidding?
  2. 如果该 ID 已经输出过相应奖品,则不能重复输出,而是输出 Checked

思路

具体思路如下:


1.我们可以先筛一遍素数,用 st 数组来标记哪些数字是素数,如果是素数则标记为 1 ,反之标记为 2 。注意,这里筛素数的方法是将素数的倍数的所有数给筛掉,因为该素数一定是这些数的因子,这些数一定不是素数。


2.用一个数组 Rank 来记录每个 ID 对应的排名。


3.查询给定 ID 的排名情况,输出相应答案。


代码

#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
int Rank[N];
int st[N];
//筛素数
void init()
{
    for (int i = 2; i < N; i++)
        if (!st[i])
        {
            st[i] = 1;    //1表示是素数
            //是i的倍数的数都不是素数,都标记为2
            for (int j = i * 2; j < N; j += i)
                st[j] = 2;
        }
}
int main()
{
    init(); //筛素数
    int n;
    cin >> n;
    //记录每个id的排名
    for (int i = 1; i <= n; i++)
    {
        int id;
        cin >> id;
        Rank[id] = i;
    }
    //输出每个参赛者的奖励
    int k;
    cin >> k;
    while (k--)
    {
        int id;
        cin >> id;
        printf("%04d: ", id);    //先输出编号
        if (!Rank[id])   puts("Are you kidding?");   //不存在此id
        else if (Rank[id] == -1)   puts("Checked");    //已经输出过
        else
        {
            int t = st[Rank[id]];
            if (!t)  puts("Mystery Award");  //第一名
            else if (t == 1)   puts("Minion"); //排名为素数
            else puts("Chocolate");         //排名不是素数
            Rank[id] = -1;    //标记为已经查询过
        }
    }
    return 0;
}
目录
相关文章
|
C++
【PAT甲级 - C++题解】1040 Longest Symmetric String
【PAT甲级 - C++题解】1040 Longest Symmetric String
66 0
|
算法 C++
【PAT甲级 - C++题解】1044 Shopping in Mars
【PAT甲级 - C++题解】1044 Shopping in Mars
82 0
|
C++
【PAT甲级 - C++题解】1117 Eddington Number
【PAT甲级 - C++题解】1117 Eddington Number
77 0
|
存储 C++ 容器
【PAT甲级 - C++题解】1057 Stack
【PAT甲级 - C++题解】1057 Stack
76 0
|
存储 C++
【PAT甲级 - C++题解】1055 The World‘s Richest
【PAT甲级 - C++题解】1055 The World‘s Richest
79 0
|
C++
【PAT甲级 - C++题解】1051 Pop Sequence
【PAT甲级 - C++题解】1051 Pop Sequence
80 0
|
人工智能 BI C++
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
137 0
|
1天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
14 2
|
7天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
33 5
|
14天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
45 4