题目描述
链接
小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出“Keep going…”
分析
用mapp存储当前用户有没有已经中奖过~当输入的时候,判断当前字符串是否已经在mapp中出现过,如果出现过就将s+1。每次判断i是否等于s,如果等于s且当前用户没有中过奖,就将它的名字输出,并且s = s + n~并将mapp[str]标记为1,且flag标记为true表示有过人中奖。最后flag如果依然是false说明要输出Keep going…
代码
#include<bits/stdc++.h>
using namespace std;
int m,n,s;
vector<string> a;
map<string, bool> mp;
int main(){
scanf("%d%d%d",&m,&n,&s);
a.resize(m+1);
for(int i=1;i<=m;i++){
cin>>a[i];
}
bool flag = 0;
for(int i=s;i<=m;i+=n){
if(mp[a[i]] != 1){
mp[a[i]] = 1;
flag = 1;
printf("%s\n", a[i].c_str());
}else{
i++;
i-=n;
}
}
if(!flag) printf("Keep going...\n");
}