1124 Raffle for Weibo Followers
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.
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.
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.
- 9 3 2
- Imgonnawin!
- PickMe
- PickMeMeMeee
- LookHere
- Imgonnawin!
- TryAgainAgain
- TryAgainAgain
- Imgonnawin!
- TryAgainAgain
- PickMe
- Imgonnawin!
- TryAgainAgain
- 2 3 5
- Imgonnawin!
- PickMe
Keep going...
总结:这道题目还是比较简单的,之前也做过,使用map存储下来已经获奖的ID即可,判断当前这个ID是否获奖,如果未获奖则直接跳跃指定的跳数,如果已获奖,判断下一个id是否获奖
代码:
- #include
- #include
- using namespace std;
-
- int main(){
- int m,n,s,cot=0;
- map
int> p; - scanf("%d%d%d",&m,&n,&s);
- string t[1010];
- for(int i=0;i
> t[i]; - for(int i=s-1;i
- if(p[t[i]]!=1){
- p[t[i]]=1;
- cot++;
- cout << t[i] << endl;
- continue;
- }
- else{
- while(1){
- i++;
- if(p[t[i]]!=1){
- cot++;
- cout << t[i] << endl;
- p[t[i]]=1;
- break;
- }
- }
- }
- }
- if(cot==0) printf("Keep going...\n");
- return 0;
- }
柳神的代码:
还是依旧的简洁明了!
- #include
- #include
- using namespace std;
- int main() {
- int m, n, s;
- scanf("%d%d%d", &m, &n, &s);
- string str;
- map
int> mapp; - bool flag = false;
- for (int i = 1; i <= m; i++) {
- cin >> str;
- if (mapp[str] == 1) s = s + 1;
- if (i == s && mapp[str] == 0) {//s表示的是下一个抽奖的的位置(关键)
- mapp[str] = 1;
- cout << str << endl;
- flag = true;
- s = s + n;
- }
- }
- if (flag == false) cout << "Keep going...";
- return 0;
- }
好好学习,天天向上!
我要考研!