写在前面
- 思路分析
- 理解题意
- 微博转发抽奖,按顺序每隔N个人就发出1个红包
- 不能中奖多次。如果已经中奖,则顺次取下1位
- 如果没人中奖,则输出“Keep going…”
- 逻辑实现
- mapp记录已中奖用户
- 当输入,判断当前字符串是否已经在mapp中出现过
- 出现过将s+1
- 每次判断i是否等于s,等于s且当前用户没中过奖,将其名字输出,并
s = s + n
,mapp[str]标记为1,flag标记为true表示有人中过奖
- 最后flag为false,输出
Keep going…
- 题目简单,10分钟a题
- 学习ing
测试用例
input:
9 3 2
Imgonnawin!
PickMe
PickMeMeMeee
LookHere
Imgonnawin!
TryAgainAgain
TryAgainAgain
Imgonnawin!
TryAgainAgain
output:
PickMe
Imgonnawin!
TryAgainAgain
input:
2 3 5
Imgonnawin!
PickMe
output:
Keep going...
ac代码
#include <iostream>
#include <map>
using namespace std;
int main()
{
int m, n, s;
scanf("%d%d%d", &m, &n, &s);
string str;
map<string, int> mapp;
bool flag = false;
for (int i = 1; i <= m; i++)
{
cin >> str;
// 已中过奖,则输出下1个未中过奖的用户昵称
if (mapp[str] == 1) s = s + 1;
if (i == s && mapp[str] == 0)
{
// 标记已中奖
mapp[str] = 1;
cout << str << endl;
// 有人中奖
flag = true;
// 进入下一轮迭代
s = s + n;
}
}
if (flag == false) cout << "Keep going...";
return 0;
}