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。也有一边输入一边处理的,在线处理很棒。

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    Git 中 .gitignore 的配置语法
    DMX512协议
    k8s 报错总结
    yum 源配置
    docker 安装 docker-compose
    docker 搭建 Harbor 仓库
    linux 远程执行命令
    远程从服务器A拷贝文件到服务器B
    docker 搭建私服仓库
    awk和xargs清除docker 容器、镜像
  • 原文地址:https://www.cnblogs.com/tccbj/p/10431141.html
Copyright © 2011-2022 走看看