在传说中的江湖中,各大帮派要选武林盟主了,如果龙飞能得到超过一半的帮派的支持就可以当选,而每个帮派的结果又是由该帮派帮众投票产生的,如果某个帮派超过一半的帮众支持龙飞,则他将赢得该帮派的支持。现在给出每个帮派的帮众人数,请问龙飞至少需要赢得多少人的支持才可能当选武林盟主?
输入格式:
测试数据有多组,处理到文件尾。每组测试先输入一个整数n(1≤n≤20),表示帮派数,然后输入n个正整数,表示每个帮派的帮众人数ai(0<ai≤100)。
输出格式:
对于每组数据输出一行,表示龙飞当选武林盟主至少需要赢得支持的帮众人数。
输入样例:
3 5 7 5
4 6 6 7 5
输出样例:
6
11
提交代码:
try:
n,*a = map(int,input().split())
while len(a)>0:
a.sort()
sum = 0
for i in range(0,int(n/2)+1):
sum += int(a[i]//2)+1
print(sum)
n, *a = map(int, input().split())
except EOFError:
pass
思路: 最开始理解这个题目就花了我不少功夫。最终理解到的结果是,给出多个不同帮派数、帮众数的平行世界,计算这些平行世界下当选为武林盟主需要的最少支持者人数。其中,每个世界都需要超过一半的帮派支持,而每个帮派内部的支持者也需要超过一半。因此,为了人数尽可能少,需要对列表进行排序,把人数多的帮派排在后面。起初只有try之内的代码,提交测试后显示EOFError,于是添加了try:...except:...模式,将错误处理置于except之中。