• PAT 1124 Raffle for Weibo Followers


    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:

    1. 9 3 2
    2. Imgonnawin!
    3. PickMe
    4. PickMeMeMeee
    5. LookHere
    6. Imgonnawin!
    7. TryAgainAgain
    8. TryAgainAgain
    9. Imgonnawin!
    10. TryAgainAgain

    Sample Output 1:

    1. PickMe
    2. Imgonnawin!
    3. TryAgainAgain

    Sample Input 2:

    1. 2 3 5
    2. Imgonnawin!
    3. PickMe

    Sample Output 2:

    Keep going...

     总结:这道题目还是比较简单的,之前也做过,使用map存储下来已经获奖的ID即可,判断当前这个ID是否获奖,如果未获奖则直接跳跃指定的跳数,如果已获奖,判断下一个id是否获奖

    代码:

    1. #include
    2. #include
    3. using namespace std;
    4. int main(){
    5. int m,n,s,cot=0;
    6. mapint> p;
    7. scanf("%d%d%d",&m,&n,&s);
    8. string t[1010];
    9. for(int i=0;i> t[i];
    10. for(int i=s-1;i
    11. if(p[t[i]]!=1){
    12. p[t[i]]=1;
    13. cot++;
    14. cout << t[i] << endl;
    15. continue;
    16. }
    17. else{
    18. while(1){
    19. i++;
    20. if(p[t[i]]!=1){
    21. cot++;
    22. cout << t[i] << endl;
    23. p[t[i]]=1;
    24. break;
    25. }
    26. }
    27. }
    28. }
    29. if(cot==0) printf("Keep going...\n");
    30. return 0;
    31. }

    柳神的代码:

    还是依旧的简洁明了!

    1. #include
    2. #include
    3. using namespace std;
    4. int main() {
    5. int m, n, s;
    6. scanf("%d%d%d", &m, &n, &s);
    7. string str;
    8. mapint> mapp;
    9. bool flag = false;
    10. for (int i = 1; i <= m; i++) {
    11. cin >> str;
    12. if (mapp[str] == 1) s = s + 1;
    13. if (i == s && mapp[str] == 0) {//s表示的是下一个抽奖的的位置(关键)
    14. mapp[str] = 1;
    15. cout << str << endl;
    16. flag = true;
    17. s = s + n;
    18. }
    19. }
    20. if (flag == false) cout << "Keep going...";
    21. return 0;
    22. }

    好好学习,天天向上!

    我要考研!

  • 相关阅读:
    TFT-eSPI入门使用教程
    【无标题】
    spark的启动测试失败
    AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其一)
    SpringBoot实战:登录管理
    SURE:增强不确定性估计的组合拳,快加入到你的训练指南吧 | CVPR 2024
    数据结构:JAVA 栈和队列
    Python实战项目:打乒乓(源码分享)(文章较短,直接上代码)
    js红宝书学习笔记(一)引用类型
    固定资产电脑怎么编号管理
  • 原文地址:https://blog.csdn.net/weixin_50679551/article/details/127463571