解题思路
换购过程是一条队列:每次队头的人买 1 枚徽章,没买完就排回队尾。直接模拟的时间与徽章总数同阶,在 n=105、medals[i]=109 时会超时。
关键观察是:目标球迷 k 一共要被服务 need=medals[k] 次,计时在他最后一次被服务时结束。把初始下标和这个次数对齐:
- 下标 i≤k 的人本来就排在目标前面(i=k 就是目标本人)。在目标被服务的这 need 轮里,他们每一轮都会在目标本次服务之前或同时轮到,所以贡献 min(medals[i],need)。
- 下标 i>k 的人排在目标后面。目标进行第 need 次换购时,这一轮还没轮到他们,因此他们最多只经历了前 need−1 轮,贡献 min(medals[i],need−1)。need=1 时这项为 0。