zoukankan      html  css  js  c++  java
  • 1124 Raffle for Weibo Followers

    John got a full mark on PAT. He was so happy that he decided to hold a raffle(抽奖) for his followers on Weibo -- that is, he would select winners from every N followers who forwarded his post, and give away gifts. Now you are supposed to help him generate the list of winners.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives three positive integers M (≤ 1000), N and S, being the total number of forwards, the skip number of winners, and the index of the first winner (the indices start from 1). Then M lines follow, each gives the nickname (a nonempty string of no more than 20 characters, with no white space or return) of a follower who has forwarded John's post.

    Note: it is possible that someone would forward more than once, but no one can win more than once. Hence if the current candidate of a winner has won before, we must skip him/her and consider the next one.

    Output Specification:

    For each case, print the list of winners in the same order as in the input, each nickname occupies a line. If there is no winner yet, print Keep going... instead.

    Sample Input 1:

    9 3 2
    Imgonnawin!
    PickMe
    PickMeMeMeee
    LookHere
    Imgonnawin!
    TryAgainAgain
    TryAgainAgain
    Imgonnawin!
    TryAgainAgain
    
     

    Sample Output 1:

    PickMe
    Imgonnawin!
    TryAgainAgain
    
     

    Sample Input 2:

    2 3 5
    Imgonnawin!
    PickMe
    
     

    Sample Output 2:

    Keep going...

    题意:

      给出粉丝列表,根据第一个粉丝的位置,以及每两个粉丝之间的间距,来寻找满足要求的所有粉丝(每个粉丝只能获奖一次,如果重复获奖的话则自动寻找下一个,知道找到没有获奖经历的那个,或者到达粉丝列表的末尾)

    思路:

      用set存储已经获过奖的人的姓名。

    Code:

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int main() {
     6     int m, n, k, index;
     7     cin >> m >> n >> k;
     8     set<string> s;
     9     vector<string> followers(m + 1), ans;
    10     for (int i = 1; i <= m; ++i) {
    11         cin >> followers[i];
    12     }
    13     if (m < k)
    14         ans.push_back("Keep going...");
    15     else {
    16         while (k <= m) {
    17             if (s.find(followers[k]) == s.end()) {
    18                 s.insert(followers[k]);
    19                 ans.push_back(followers[k]);
    20             } else {
    21                 while (k <= m && s.find(followers[k]) != s.end()) {
    22                     k++;
    23                 }
    24                 ans.push_back(followers[k]);
    25             }
    26             k += n;
    27         }
    28     }
    29     for (int i = 0; i < ans.size(); ++i) {
    30         cout << ans[i] << endl;
    31     }
    32 
    33     return 0;
    34 }
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    android闹钟
    Android API : SMS短信服务处理
    Windows Mobile Web方式下载文件
    摘录的一点东西,很有感触
    Net Compact Framework 基础篇(6) Socket通信 【转】
    实例讲解.NET中资源文件的创建与使用
    如何安装Apk文件到Android模拟器
    __forceinline 关键字
    Allocate aligned memory
    linux svn安装和配置,不结合apache
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12753533.html
Copyright © 2011-2022 走看看