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

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/tccbj/p/10431141.html
Copyright © 2011-2022 走看看