关于c++:PAT甲级1124-Raffle-for-Weibo-Followers

5次阅读

共计 737 个字符,预计需要花费 2 分钟才能阅读完成。

题目粗心

给定 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;
}
正文完
 0