1069 微博转发抽奖 (20 分)
题目链接
算法分析
用flag记录是否输出过获奖人名字
用map类型take记录某人是否拿走过奖品
用cnt记录间隔人数
然后按要求输出就好。
代码实现
#include<bits/stdc++.h>
using namespace std;
map< string , int >take;
int main(){
string name;
int m, n, s, cnt;
bool flag = 1;
scanf("%d%d%d", &m, &n, &s);
for(int i = 1; i <= m; ++ i){
cin>> name;
if(i < s) continue;
else if(i == s){
take[name] = 1;
cout<< ' '<< name<< endl;
cnt = flag = 0;
}
else{
cnt ++;
if(cnt == n){
if(!take[name]){
take[name] = 1;
cout<< ' '<< name<< endl;
cnt = 0;
}
else cnt --;//之前已经领到奖品,跳过这个人
}
}
}
if(flag) puts("Keep going...");
return 0;
}