首页 > 试题广场 >

分玩具

[编程题]分玩具
  • 热度指数:2397 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
幼儿园里有有M个小朋友在课件玩耍,每个人手中现有ni个玩具。为了公平起见,老师需要让每个小朋友手中有相同数量的玩具。假设老师每次只能从一个人手中拿走两个玩具并给另一个小朋友。求老师最少需要做多少次这样的玩具转移。如果不存在可行的方案则输出-1。

输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数M(1 <= M<= 100),接下来的一行包含M个整数ni(1 <= ni <= 100)。


输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。
示例1

输入

4
7 15 9 5

输出

3
示例2

输入

2
3 6

输出

-1
def devide_candy(messages):
    N = int(messages[0].strip())
    ori = []
    for i in range(N):
        ori.append(int(messages[1].strip().split()[i]))

    if sum(ori)%len(ori)!=0:
        print(-1)
        return 0
    avg = sum(ori)//len(ori)
    for i in ori:
        if abs(i-avg)%2!=0:
            print(-1)
            return 0
    res =[]
    for j in ori:
        a = j-avg
        if a>0:
            res.append(a)
    print(sum(res)//2)
    return 0
if __name__ == '__main__':
    import sys
    messages = sys.stdin.readlines()
    devide_candy(messages)
发表于 2020-05-20 10:55:44 回复(0)
def dis_toy(m, n):
    if sum(n)%m != 0:
        return -1
    toy = sum(n)//m
    res = 0
    for s in n:
        if s < toy:
            more = toy-s
            if more%2 != 0:
                return -1
            res += more//2
    return res
m = int(input())
n = list(map(int,input().split()))
print(dis_toy(m,n))
编辑于 2019-07-10 10:27:20 回复(2)