题意
给出m条评论,开始抽奖,中奖id从s开始,id从1开始,间隔n条评论,中过奖的不能再次中奖。
如果没有人中奖,输出 Keep going…
思路
此题不难,但是如果不充分理解题意,处理不好会变得很麻烦。
- 处理中间id从s开始:先输入s条,忽略
- 处理间隔n个,且中过奖的不能再次中奖:设置一个计数器,加map判重。
Sample Input1:
9 3 2
Imgonnawin!
PickMe
PickMeMeMeee
LookHere
Imgonnawin!
TryAgainAgain
TryAgainAgain
Imgonnawin!
TryAgainAgain
Sample Output1:
PickMe
Imgonnawin!
TryAgainAgain
Sample Input2:
2 3 5
Imgonnawin!
PickMe
Sample Output2:
Keep going...
#include "bits/stdc++.h"
using namespace std;
int main(){
freopen("input.txt","r",stdin);
int m, n, s; cin >> m >> n >> s;
int cnt = 1;
map<string,int> winner;
for (int i = 1; i < s; ++i) {string name; cin >> name;}
for (int i = 0; i <= m-s; ++i) {
string name; cin >> name;
if (i == 0) {
winner[name] = 1;
cout << name << endl;
continue;
} else if (cnt == n && !winner.count(name) ){
winner[name] = 1, cnt = 1;
cout << name << endl;
} else if (cnt < n) cnt ++;
}
if (winner.empty()) printf("Keep going...\n");
}