PAT A1124 Raffle for Weibo Followers (20 分)

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...
  PAT A1124 Raffle for Weibo Followers (20 分)
 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\n",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\n",res[i].c_str());
32             }
33         }
34     }
35 }
View Code

注意点:题目要看清楚,把n和s搞反了一直答案错误。题目其实没有说清楚的一点是已经中奖的人跳到下一个以后,再下一个中奖的人是按照原来的顺序加间隔,还是新的那个人加间隔。

ps:用set好像不太好,大佬都是用的map直接可以判断是否为0,map创建int时默认为0。也有一边输入一边处理的,在线处理很棒。

上一篇:02>>>变量和基本数据类型


下一篇:判断点是否任意多边形内的2种方法