PAT A 1124 Raffle for Weibo Followers (20分)

一、题目概述

依据给定转发用户名单及抽奖机制,筛选中奖者。
抽奖机制:第S个用户为第一个中奖用户, 之后每N个用户为中奖用户。

二、思路

设当前用户是第i个转发用户, 第S个用户是首个中奖用户,则若(i - S)是N的非负整数倍,则当前用户中奖(若非已中奖用户)。若当前用户中过奖,令S加一即可实现跳过。
用map作为存储已中奖用户名单的数据结构,判断用户是否已经中过奖。

三、代码

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
    int M, N, S;
    map<string, bool> tag;
    cin >> M >> N >> S;
    for(int i = 1; i <= M; ++i)
    {
        string name;
        cin >> name;
        if(i >= S && (i - S) % N == 0)
        {
            if(!tag[name])
            {
                tag[name] = true;
                cout << name << endl;
            }
            else ++S;
        }
    }
    if(S > M)
        cout << "Keep going...";
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值