zoukankan      html  css  js  c++  java
  • PTA 乙级 1069 微博转发抽奖 (20分) C++

    刚开始没用map,想利用数组容器存储获过奖的昵称,关于如何判断是否已经获过奖,直接用的遍历的方法,跟数组的每一个元素进行比较(很繁琐,也很费时) 

    原本的想法,测试点3怎么也无法通过(测试点3:顺延之后要从该获奖序号开始取下一个间隔为N的序号为中奖号。

    后来看了看别人的代码,用一个map来存储每一个昵称获奖次数即可

    原本的代码:

     1 #include<iostream>
     2 #include<vector>
     3 
     4 using namespace std;
     5 
     6 int main() {
     7     int m = 0, n = 0, s = 0;
     8     cin >> m >> n >> s;
     9     if (s > m) { cout << "Keep going..."; return 0; }
    10     vector<string> win(m + 1);
    11     int j = 0;
    12     int flag = 0;
    13     for (int i = 1; i <= m; ++i) {
    14         string tmp;
    15         cin >> tmp;
    16         if (flag) {
    17             win[j] = tmp;
    18             j++;
    19             flag = 0;
    20         }
    21         if (i == s) {
    22             for (int k = 0; k <= j; ++k) {
    23                 if (win[k] == tmp)
    24                     flag = 1;
    25             }
    26             if (flag) { s++; continue; }
    27             win[j] = tmp;
    28             j++;
    29             s += n;
    30         }
    31      }
    32     for (int i = 0; i < j; ++i) cout << win[i] << endl;
    33     return 0;
    34 }

    真是令人崩溃

    改进后的:

     1 #include<iostream>
     2 #include<map>
     3 
     4 using namespace std;
     5 
     6 int main() {
     7     int m = 0, n = 0, s = 0;
     8     cin >> m >> n >> s;
     9     if (s > m) { cout << "Keep going..."; return 0; }        //没有人中奖
    10     map<string, int> gain;                                    //以每个人的昵称为键,判断是否中过奖
    11     for (int i = 1; i <= m; ++i) {
    12         string tmp;
    13         cin >> tmp;
    14         if (gain[tmp] == 1) s++;                            //此人中过奖,之后依次顺延
    15         if (i == s && gain[tmp] == 0) {                        
    16             gain[tmp] = 1;                                    //标记此昵称已中过奖
    17             cout << tmp << endl;
    18             s += n;
    19         }
    20      }
    21     return 0;
    22 }

  • 相关阅读:
    EF6 AddOrUpdate之后,数据没有改变而是新增了一条数据解决办法
    php多文件上传数组 转换
    windows svn 上传后 自动部署 到web目录下
    一组实用网址
    apache 虚拟ip
    ThinkPHP 空方法 显示
    thinkphp 创建子应用
    Zend Studio 9.0.4 新建项目
    鼠标悬浮停留三秒 显示大图
    mysql GROUP BY 与 ORDER BY 查询不是最新记录
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13631947.html
Copyright © 2011-2022 走看看