zoukankan      html  css  js  c++  java
  • PAT A1124 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...
    
     
     1 #include <stdio.h>
     2 #include <string>
     3 #include <iostream>
     4 #include <set>
     5 using namespace std;
     6 const int maxn=1010;
     7 string res[maxn];
     8 set<string> st;
     9 int main(){
    10     string s;
    11     int m,n,p;
    12     cin>>m>>n>>p;
    13     for(int i=1;i<=m;i++){
    14         cin>>res[i];
    15     }
    16     if(m<p){
    17         printf("Keep going...");
    18         return 0;
    19     }
    20     for(int i=p;i<=m;i+=n){
    21         if(st.find(res[i])==st.end()){
    22             st.insert(res[i]);
    23             printf("%s
    ",res[i].c_str());
    24         }
    25         else{
    26             while(st.find(res[i])!=st.end() && i<=m){
    27                 i++;
    28             }
    29             if(i<=m){
    30                 st.insert(res[i]);
    31                 printf("%s
    ",res[i].c_str());
    32             }
    33         }
    34     }
    35 }
    View Code

    注意点:题目要看清楚,把n和s搞反了一直答案错误。题目其实没有说清楚的一点是已经中奖的人跳到下一个以后,再下一个中奖的人是按照原来的顺序加间隔,还是新的那个人加间隔。

    ps:用set好像不太好,大佬都是用的map直接可以判断是否为0,map创建int时默认为0。也有一边输入一边处理的,在线处理很棒。

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    c#简单操作MongoDB_2.4
    将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器
    利用双缓冲队列来减少锁的竞争
    移动端地区选择控件mobile-select-area
    服务器CPU居高不下--解决问题历程
    .NET常用开发工具整理
    免费的精品: Productivity Power Tools 动画演示
    二维码编码与解码类库ThoughtWorks.QRCode
    C#异步编程基础入门总结
    优盘版Kali
  • 原文地址:https://www.cnblogs.com/tccbj/p/10431141.html
Copyright © 2011-2022 走看看