题目粗心
给定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;}