1069 微博转发抽奖 (20 分)

本文介绍了一种基于C++的抽奖算法实现,通过使用map标记已输出的获奖者,确保了每轮抽奖的公平性和效率。文章详细解释了如何边输入边判断,以及如何处理没有中奖的特殊情况。

注意:\color{red}注意:
可以边输入边判断
要首先输出开始的字符串,再考虑间隔多少人输出。
输出过的人使用map标记一下。
如果没有中奖的人需要特殊处理

#include <string>
#include <cstdio>
#include <iostream>
#include <unordered_map>
#include <algorithm>  
using namespace std;
int main() {
	int m, n, s;
	cin >> m >> n>> s;
	getchar();
	string str;
	int num = 0, t = 0;
	unordered_map<string, bool> mp; 
	bool flag = false;
	for(int i = 1; i <= m; i++){
		getline(cin, str);
		if(i == s){
			cout<<str<<endl;
			mp[str] = true;
			flag = true;
			num++;
			continue;
		}
		if(flag){
			if(!mp[str]) t++;
			if(t == n){
				num++;
				cout<<str<<endl;
				mp[str] = true;
				t = 0;
			}
		}
		
	}
	if(num == 0) cout<<"Keep going..."<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值