PAT甲级1124 Raffle for Weibo Followers (20分)|C++实现

一、题目描述

原题链接
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:

在这里插入图片描述

​​Output Specification:

在这里插入图片描述

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…

二、解题思路

对于这道题,我们可以利用map做一个字符串到数字的哈希,记录每个用户是否已经获过奖,如果获得过,则顺延;若未曾获奖,则输出名字,并且进行下一跳。代码还是比较易懂的。

三、AC代码

#include<iostream>
#include<cstdio>
#include<unordered_map>
#include<vector>
#include<algorithm>
using namespace std;
unordered_map<string, int> mp;
int main()
{
    int N, skip, M;
    string str;
    scanf("%d%d%d", &N, &skip, &M);
    int cnt = 0;
    vector<string> v;
    for(int i=1; i<=N; i++)
    {
        cin >> str;
        v.push_back(str);
    }
    for(int i=M; i<=N; )
    {
        if(mp[v[i-1]] == 0)
        {
            cout << v[i-1] << endl;
            cnt++;
            mp[v[i-1]] = 1;
            i += skip;
            continue;
        }
        i++;
    }
    if(cnt == 0)    printf("Keep going...");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值