1069 微博转发抽奖 (20 分)

题目链接:1069 微博转发抽奖

大致思路如下:

  • 首先当第一位中奖的人数直接大于总人数时,就可以输出Keep going...了,因为这种情况下肯定没人中奖
  • 用map做标记,使用用户名string类型作为键,标记int类型作为值,即 map<string,int> mapp;mapp["string"] == 1时,代表这个人已经领过奖品了,所以依次向下顺延,但因为可能顺延不止一次(测试点3不能通过的原因所在)所以需要在此写一个while循环,让i++一直加到mapp["string"] == 0为止

完整代码如下:

#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{ 
    //m转发的总量
    //n小明决定的中奖间隔
    //s以及第一位中奖者的序号(编号从 1 开始)
    int m,n,s;
    cin>>m>>n>>s;
    if(s > m) 
    {
        cout<<"Keep going...";
        return 0;
    }

    string ss[m];
    map<string,int> mapp; //用map做标记
    for(int i = 0;i < m;i++)
    {
        cin>>ss[i];
    }


	//cout<<endl;
	
    for(int i=s-1;i < m;i += n)
    {
        if(mapp[ss[i]] == 0)//代表没被领过
        {
            cout<<ss[i]<<endl;
            mapp[ss[i]]++;//标记 已经领过了
        }
        else if(mapp[ss[i]] == 1)  
		{
			while(mapp[ss[i]] == 1)
				i++;
		
			if(mapp[ss[i]] == 0)//代表没被领过
       		 {
           		 cout<<ss[i]<<endl;
           		 mapp[ss[i]]++;//标记 已经领过了
        	 }
		}
    }
    return 0;
}

这样就AC啦~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菲601

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值