0
点赞
收藏
分享

微信扫一扫

A1124 Raffle for Weibo Followers (20 分| map映射,附详细注释,逻辑分析)


写在前面

  • 思路分析
  • 理解题意
  • 微博转发抽奖,按顺序每隔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;
}


举报

相关推荐

0 条评论