题意:A中奖了,然后在微博上给转发它微博的人抽奖,每隔n个人就抽一个人,如果该人已经奖励了,就要奖励下一个人。
思路:用map集合保存奖励者是否奖赏过,s是奖励人的下标,当i==s且当前人未被奖励过,就打印输出,并置其已访问,若是已经奖赏过了,奖赏的索引要向后移动。
代码:
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main() {
int m, n, s, flag = 0;
string tem;
cin >> m >> n >> s;
map<string, int> mp;//保存是否已经奖励过了
for (int i = 1; i <= m; i++) {
cin >> tem;
if (mp[tem] == 1)s++;//如果已经奖励过了就直接奖励下一个人
if (i == s && mp[tem] == 0) {
mp[tem] = 1;
cout << tem << endl;
flag = 1;
s += n;
}
}
if (flag == 0)cout << "Keep going..." << endl;
system("pause");
return 0;
}