John got a full mark on PAT. He was so happy that he decided to hold a raffle(抽奖) for his followers on Weibo -- that is, he would select winners from every N followers who forwarded his post, and give away gifts. Now you are supposed to help him generate the list of winners.
Input Specification:
Each input file contains one test case. For each case, the first line gives three positive integers M (≤ 1000), N and S, being the total number of forwards, the skip number of winners, and the index of the first winner (the indices start from 1). Then M lines follow, each gives the nickname (a nonempty string of no more than 20 characters, with no white space or return) of a follower who has forwarded John's post.
Note: it is possible that someone would forward more than once, but no one can win more than once. Hence if the current candidate of a winner has won before, we must skip him/her and consider the next one.
Output Specification:
For each case, print the list of winners in the same order as in the input, each nickname occupies a line. If there is no winner yet, print Keep going...
instead.
Sample Input 1:
9 3 2
Imgonnawin!
PickMe
PickMeMeMeee
LookHere
Imgonnawin!
TryAgainAgain
TryAgainAgain
Imgonnawin!
TryAgainAgain
Sample Output 1:
PickMe
Imgonnawin!
TryAgainAgain
Sample Input 2:
2 3 5
Imgonnawin!
PickMe
Sample Output 2:
Keep going...
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> 2 #include <string> 3 #include <iostream> 4 #include <set> 5 using namespace std; 6 const int maxn=1010; 7 string res[maxn]; 8 set<string> st; 9 int main(){ 10 string s; 11 int m,n,p; 12 cin>>m>>n>>p; 13 for(int i=1;i<=m;i++){ 14 cin>>res[i]; 15 } 16 if(m<p){ 17 printf("Keep going..."); 18 return 0; 19 } 20 for(int i=p;i<=m;i+=n){ 21 if(st.find(res[i])==st.end()){ 22 st.insert(res[i]); 23 printf("%s ",res[i].c_str()); 24 } 25 else{ 26 while(st.find(res[i])!=st.end() && i<=m){ 27 i++; 28 } 29 if(i<=m){ 30 st.insert(res[i]); 31 printf("%s ",res[i].c_str()); 32 } 33 } 34 } 35 }
注意点:题目要看清楚,把n和s搞反了一直答案错误。题目其实没有说清楚的一点是已经中奖的人跳到下一个以后,再下一个中奖的人是按照原来的顺序加间隔,还是新的那个人加间隔。
ps:用set好像不太好,大佬都是用的map直接可以判断是否为0,map创建int时默认为0。也有一边输入一边处理的,在线处理很棒。