一、题目描述
原题链接
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;
}