A1124 Raffle for Weibo Followers (20 分| map映射,附详细注释,逻辑分析)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_24452475/article/details/100587592

写在前面

  • 思路分析
    • 理解题意
      • 微博转发抽奖,按顺序每隔N个人就发出1个红包
      • 不能中奖多次。如果已经中奖,则顺次取下1位
      • 如果没人中奖,则输出“Keep going…”
    • 逻辑实现
      • mapp记录已中奖用户
      • 当输入,判断当前字符串是否已经在mapp中出现过
        • 出现过将s+1
        • 每次判断i是否等于s,等于s且当前用户没中过奖,将其名字输出,并s = s + n,mapp[str]标记为1,flag标记为true表示有人中过奖
      • 最后flag为false,输出Keep going…
  • 题目简单,10分钟a题
    • 学习ing

测试用例

  • input:
    9 3 2
    Imgonnawin!
    PickMe
    PickMeMeMeee
    LookHere
    Imgonnawin!
    TryAgainAgain
    TryAgainAgain
    Imgonnawin!
    TryAgainAgain
    
    output:
    PickMe
    Imgonnawin!
    TryAgainAgain
    
    input:
    2 3 5
    Imgonnawin!
    PickMe
    
    output:
    Keep going...
    

ac代码

  • #include <iostream>
    #include <map>
    using namespace std;
    int main()
    {
        int m, n, s;
        scanf("%d%d%d", &m, &n, &s);
        string str;
        map<string, int> mapp;
        bool flag = false;
    
        for (int i = 1; i <= m; i++)
        {
            cin >> str;
            // 已中过奖,则输出下1个未中过奖的用户昵称
            if (mapp[str] == 1) s = s + 1;
            if (i == s && mapp[str] == 0)
            {
                // 标记已中奖
                mapp[str] = 1;
                cout << str << endl;
                // 有人中奖
                flag = true;
                // 进入下一轮迭代
                s = s + n;
            }
        }
        if (flag == false) cout << "Keep going...";
        return 0;
    }
    

猜你喜欢

转载自blog.csdn.net/qq_24452475/article/details/100587592