PAT A1124 Raffle for Weibo Followers [模拟+STL]

题目描述

链接
小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包。请你编写程序帮助他确定中奖名单。注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出“Keep going…”

分析

用mapp存储当前用户有没有已经中奖过~当输入的时候,判断当前字符串是否已经在mapp中出现过,如果出现过就将s+1。每次判断i是否等于s,如果等于s且当前用户没有中过奖,就将它的名字输出,并且s = s + n~并将mapp[str]标记为1,且flag标记为true表示有过人中奖。最后flag如果依然是false说明要输出Keep going…

代码

#include<bits/stdc++.h>
using namespace std;

int m,n,s;

vector<string> a;
map<string, bool> mp;

int main(){
    scanf("%d%d%d",&m,&n,&s);
    a.resize(m+1);
    for(int i=1;i<=m;i++){
        cin>>a[i];
    }
    bool flag = 0;
    for(int i=s;i<=m;i+=n){
        if(mp[a[i]] != 1){
            mp[a[i]] = 1;
            flag = 1;
            printf("%s
", a[i].c_str());
        }else{
            i++;
            i-=n;
        }
    }
    if(!flag) printf("Keep going...
");

}

原文地址:https://www.cnblogs.com/doragd/p/11466003.html