题解
2026-05-20 19:34:50
发布于:湖南
10阅读
0回复
0点赞
题意
一、题意
1.有 n 个小朋友排成一队,编号 1~n,每个小朋友至少需要 a[i] 颗糖才回家。
2.发糖规则:
(1)每次给队首小朋友发 m 颗糖。
(2)如果他达到 或 超过需要的糖,就回家(离开队伍)。
(3)没达到就排到队尾,继续等待下次发糖。
(4)不断重复,直到队伍为空。
要求输出:最后一个回家的小朋友编号。
思路
1.结构体存信息
用结构体 P 存每个小朋友还需要多少糖 n 和编号 idx,方便一起入队、出队。
2.初始化队列
读入 n、m,再读入每个小朋友需要的糖数,把需要的糖数 + 编号一起存入队列。
3.模拟发糖全过程
(1)每次取出队首小朋友;
(2)发 m 颗糖:用 需要的糖 -= m 模拟(减到 ≤0 就说明够了);
(3)如果够了:直接出队(回家);
(4)如果不够:先把他重新 push 到队尾,再 pop 掉队首;
(5)每次操作后判断:如果队伍空了,说明当前这个小朋友就是最后回家的,直接输出编号。
(6)输出答案最后一次被 pop 的小朋友,就是最后回家的。
#include <bits/stdc++.h>
using namespace std;
struct P {
int n,idx;
};
queue<P> q;
int main() {
int n,m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
q.push({x, i});
}
while (q.size() != 0) {
P u = q.front();
u.n -= m;
if (u.n <= 0) q.pop();
else {
q.push(u);
q.pop();
}
if (q.size() == 0) {
cout << u.idx;
break;
}
}
return 0;
}

这里空空如也








有帮助,赞一个