zoukankan      html  css  js  c++  java
  • PAT乙级1059

    C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:

    • 0、冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。
    • 1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
    • 2、其他人将得到巧克力。

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

    输入格式:

    输入第一行给出一个正整数 N(104​​),是参赛者人数。随后 N 行给出最终排名,每行按排名顺序给出一位参赛者的 ID(4 位数字组成)。接下来给出一个正整数 K 以及 K 个需要查询的 ID。

    输出格式:

    对每个要查询的 ID,在一行中输出 ID: 奖品,其中奖品或者是 Mystery Award(神秘大奖)、或者是 Minion(小黄人)、或者是 Chocolate(巧克力)。如果所查 ID 根本不在排名里,打印 Are you kidding?(耍我呢?)。如果该 ID 已经查过了(即奖品已经领过了),打印 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 #include<bits/stdc++.h>
     2 #define maxn 10005
     3 using namespace std;
     4 map<int,int>mp;
     5 bool isprime(int x)
     6 {
     7     if(x==1)return 0;
     8     for(int i=2;i*i<=x;i++)
     9         if(x%i==0)
    10         return 0;
    11     return 1;
    12 }
    13 void change(int j)
    14 {
    15     if(mp[j]<0)
    16         printf("Checked
    ");
    17     else if(j==1)
    18         printf("Mystery Award
    ");
    19     else if(isprime(j))
    20         printf("Minion
    ");
    21     else
    22         printf("Chocolate
    ");
    23 }
    24 int main()
    25 {
    26     int n,k;
    27     mp.insert(make_pair(0,0));
    28     scanf("%d",&n);
    29     for(int i=1;i<=n;i++)
    30     {
    31         int cnt;
    32         scanf("%d",&cnt);
    33         mp.insert(make_pair(i,cnt));
    34     }
    35     scanf("%d",&k);
    36     for(int i=1;i<=k;i++)
    37     {
    38         int w;
    39         scanf("%d",&w);
    40         printf("%04d: ",w);
    41         int flag=1;
    42         for(int j=1;j<=n;j++)
    43         {
    44             if(abs(mp[j])==w)
    45             {
    46                 change(j);
    47                 flag=0;
    48                 if(mp[j]>0)
    49                     mp[j]=-w;
    50                 break;
    51             }
    52         }
    53         if(flag)
    54             printf("Are you kidding?
    ");
    55     }
    56     return 0;
    57 }

    STL比数组慢,经过改进

     1 #include<bits/stdc++.h>
     2 #define maxn 10005
     3 using namespace std;
     4 int mp[maxn];
     5 bool isprime(int x)
     6 {
     7     if(x==1)return 0;
     8     for(int i=2;i*i<=x;i++)
     9         if(x%i==0)
    10         return 0;
    11     return 1;
    12 }
    13 int main()
    14 {
    15     int n,k,id;
    16     scanf("%d",&n);
    17     for(int i=1;i<=n;i++)
    18     {
    19         scanf("%d",&id);
    20         if(i==1)
    21             mp[id]=3;
    22         else if(isprime(i))
    23             mp[id]=1;
    24         else mp[id]=2;
    25     }
    26     scanf("%d",&k);
    27     for(int i=1;i<=k;i++)
    28     {
    29         scanf("%d",&id);
    30         switch(mp[id])
    31         {
    32             case 0:printf("%04d: Are you kidding?
    ",id);
    33             break;
    34             case 1:printf("%04d: Minion
    ",id);mp[id]=4;
    35             break;
    36             case 2:printf("%04d: Chocolate
    ",id);mp[id]=4;
    37             break;
    38             case 3:printf("%04d: Mystery Award
    ",id);mp[id]=4;
    39             break;
    40             case 4:printf("%04d: Checked
    ",id);
    41             break;
    42         }
    43     }
    44     return 0;
    45 }

  • 相关阅读:
    andrax不为人知的秘密
    SecuritySRT console已经建立链接为什么还没有反应?
    必备软硬件
    关于mt的个人看法及优缺点
    hash是什么
    usb接口的缺点
    古董交换机欣赏
    博客圆低调的文章审核机制
    手机技术控不能买哪些手机,应该买什么手机
    两个以上vlan三台以上交换机配置好,网络不通,引发的思考
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/10919735.html
Copyright © 2011-2022 走看看