目的:抽奖
输入:
M 转发数
N 跳跃数
S 第一个人的标号
M行,每行一个20字符的字符串
输出:
输出抽中的人名字
算法:
从开始的人,每隔跳跃数抽中一个,若是抽中的人已经抽中了,那就在抽这个人后面那个。如果转发数太少,第一个人都抽不出来,输出流局。
#include<stdio.h>
#include<iostream>
#include<string>
#include<unordered_map>
#include<vector>
using namespace std;
unordered_map<string,int> hash1;
vector<string> v;
int M,N,S;//转发总数,
int main()
{
scanf("%d%d%d",&M,&N,&S);
for(int i=0;i<M;i++)
{
string str;
cin>>str;
v.push_back(str);
hash1[str] = 1;
}
if(M<S)
{
printf("Keep going...\n");
}else
{
int i = S-1;
while(i<M)
{
string u = v[i];
if(hash1[u]==1)
{
hash1[u] = 0;
i += N;
cout<<u<<endl;
}else{
i++;
}
}
}
return 0;
}