一、题目概述
依据给定转发用户名单及抽奖机制,筛选中奖者。
抽奖机制:第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...";
}