测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A38882. 编程实现现有N罐糖果,且已知每罐糖果的初始数量。现给出两个数值L和R(L<=R),需要把每罐糖果的数量调整为:L<=任意一罐糖果的数量<=R。调整的方式是每次从其中一罐糖果中拿出1块放到其他糖果罐中。请你计算出最少调整几次才能使每罐糖果的数量都在L到R范围之间,如果不能将每罐糖果都调整到L到R范围之间则输出-1。例如:N=2,2罐糖果的初始数量为3和8,L=3,R=6,通过调整使得:3<=任意一…

填空题 困难

题目描述

编程实现

现有N罐糖果,且已知每罐糖果的初始数量。现给出两个数值L和R(L<=R),需要把每罐糖果的数量调整为:L<=任意一罐糖果的数量<=R。

调整的方式是每次从其中一罐糖果中拿出1块放到其他糖果罐中。请你计算出最少调整几次才能使每罐糖果的数量都在L到R范围之间,如果不能将每罐糖果都调整到L到R范围之间则输出-1。

例如:N=2,2罐糖果的初始数量为3和8,L=3,R=6,通过调整使得:3<=任意一罐糖果的数量<=6,调整方式如下:

第一次从初始数量为8的罐中拿1块放到初始数量为3的罐中,调整后为(4,7);

第二次从数量为7的罐中拿1块放到数量为4的罐中,调整后为(5,6);

故最少调整2次。

样例输入

2

3 8

3 6

样例输出

2

参考答案

n=int(input()) ls=list(map(int,input().split())) L,R=map(int,input().split()) if L*n<=sum(ls)/n<=R*n : i=0 while True: ls.sort() if ls[0]>=L and ls[n-1]<=R : print(i) break ls[0]+=1 ls[n-1]-=1 i+=1 else: print(-1)
上一题 下一题