版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
写在前面
- 思路分析
- 理解题意
- 微博转发抽奖,按顺序每隔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; }