小U和 n 个小朋友正在玩一个有趣的糖果传递游戏。n 个小朋友按顺序排成一列,小U站在最右边的位置。游戏开始时,小U为每个小朋友分配了 a[1], a[2], ..., a[n] 个糖果。现在,小U手里还剩下 m 个糖果要分配。
分配规则如下:
每个糖果都会先从第一个小朋友开始分配。如果当前小朋友的糖果数量(包括新分配的糖果)小于或等于他的右边的小朋友,则他会保留这个糖果。
如果当前小朋友的糖果数量大于他右边的小朋友,他会将这个糖果传递给下一个小朋友。
这个过程会持续,直到糖果传递到第 n 个小朋友。如果第 n 个小朋友也不能保留这个糖果,那么糖果会被传递给小U。
现在,请你帮忙确定第 m 个糖果最终会分配给哪个小朋友,或者传递给小U。
样例
测试样例
样例1:
输入:n =4, m =3, a =[1,2,3,4]
输出:1
样例2:
输入:n =4, m =2, a =[4,3,2,3]
输出:5
样例3:
输入:n =4, m =2, a =[4,3,2,2]
输出:5
答案
defsolution(n, m, a):# 模拟分发每个糖果for candy inrange(m):# 创建临时数组来存储当前糖果分配状态
current = a.copy()
pos =0while pos < n:# 给当前小朋友添加糖果
current[pos]+=1# 检查是否需要传递给下一个小朋友if pos < n -1:# 不是最后一个小朋友if current[pos]> current[pos +1]:
pos +=1# 传递给下一个小朋友else:# 当前小朋友可以保留糖果if candy == m -1:# 如果是最后一颗糖果return pos +1# 返回1-based索引# 更新实际的糖果数组
a[pos]= current[pos]breakelse:# 是最后一个小朋友# 最后一个小朋友的糖果一定传给小U,因为小U的糖果数可以认为是无限大if candy == m -1:# 如果是最后一颗糖果return n +1# 给小Ubreak# 如果糖果传递完整个队列或传给了最后一个小朋友if pos == n -1:if candy == m -1:# 如果是最后一颗糖果return n +1# 返回小U的位置elif pos < n -1:# 更新数组状态
a[pos]= current[pos]return0# 这行代码实际上不会执行到if __name__ =="__main__":# Add your test cases hereprint(solution(4,3,[1,2,3,4])==1)print(solution(4,2,[4,3,2,3])==5)