zoukankan      html  css  js  c++  java
  • 1124 Raffle for Weibo Followers[简单]

    1124 Raffle for Weibo Followers(20 分)

    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...

     题目大意:输出m,n,s分别表示转发微博的人数,寻找的跳数,初始winner,并且要求如果已经获过奖的就不能再获奖,下次遍历到它时就应该跳过。

     //第一次我是这么想的,对所有重复转发的只记录第一次的转发,但是后来发现,这样:

    因为初始获奖者跳过了Imgonnawin!用户,下一次再出现时我没有将其记录,就顺次到了下一位用户。这就出现了错误。

    AC代码:

    #include <iostream>
    #include <map>
    #include <cstdio>
    #include <vector>
    using namespace std;
    map<string,int> mp;
    vector<string> vt;
    int main() {
        int m,n,s;
        cin>>m>>n>>s;
        string name;
        for(int i=1;i<=m;i++){
            cin>>name;
            vt.push_back(name);//存都是要存起来的。
        }
       // cout<<endl;
        int len=vt.size();
        bool flag=false;
        for(int i=s-1;i<len;i+=n){
            while(mp.count(vt[i])!=0){
                i++;
            }
            if(mp.count(vt[i])==0){//如果它没有出现过
                flag=true;
                cout<<vt[i]<<'\n';
                mp[vt[i]]=1;//出现过。
            }
        }
    
        if(!flag)cout<<"Keep going...";
        return 0;
    }

    //这个题目真的是比较简单的,如果当前已经领过奖了,那么就一直跳过,如果没有出现过就输出并且标记,算是一星的难度吧。

  • 相关阅读:
    MyBatis
    泛型集合(经典)
    Java高级特性--------->>>>>实用类
    Java高级特性----->>>>集合
    【java面试题】StringBuilder与StringBuffer和String 的区别
    Java面向对象------>try{}catch(){}异常
    Java面向对象----->接口和抽象类
    Java修饰符------>static、native和final以及super和this关键字
    面向对象------->多态
    面向对象--->封装和继承
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/9549074.html
Copyright © 2011-2022 走看看