题目大意
给定M条微博转发条目,针对每一个用户的转发条目,从中抽取一些人作为winner并给予奖品,第一个获奖的人是第S次转发的人,下一个获奖的人为上一个获奖人的位置加N,同一个人不能获奖两次,现在要求你输出获奖名单,对于没有人获奖的情况,输出Keep going...。
算法思路
使用一个map——winner记录所有已经获奖的人,winnerIndex记录下一个获奖的人的位置,如果s>m,说明没有人获奖,输出Keep going...。否则就按照顺序输入每一条转发的微博条目,只要当前人的位置i==winnerIndex,并且winner[a] = false,就说明此人为当前获奖的人,否则就++winnerIndex往下查找
提交结果
AC代码
#include <unordered_map>
#include <string>
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int m,n,s;// 转发数目,跳跃数目,起始获奖下标
scanf("%d %d %d",&m,&n,&s);
if(s>m){
cout<<"Keep going...";
return 0;
}
// 记录已经获奖的人
unordered_map<string,bool> winner;
// 下一个获奖人的下标
int winnerIndex = s;
for(int i=1;i<=m;++i){
string a;
cin>>a;
if(i==winnerIndex){
if(!winner[a]){
// 当前人没有得过奖
cout<<a<<endl;
winner[a] = true;
winnerIndex += n;
}else{
++winnerIndex;
}
}
}
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。