題目描述
小東和其他小朋友正在玩一個關於選舉的遊戲。選舉是通過投票的方式進行的,得票最多的人將獲勝。
小東是編號爲1的候選者,此外還有其他的候選者參加選舉。根據初步的調查情況,所有準備投票的小朋友都有一定的投票傾向性,小東如果要獲得勝利,
必須爭取部分準備爲其他候選人投票的小朋友。由於小東的資源較爲有限,她希望用最小的代價贏得勝利,請你幫忙計算她最少需要爭取的選票數。
題目大意:
小東參加選舉,候選人數確定,候選人擬得票數確定。他不算土豪,拉票能力有限,讓解題者尋找最小代價當選的方法,即要想當選,最少再拉多少票?
解題思路:
1.若所有候選人目前的得票期望都不如小東,此時不用拉票
2.若候選人中最大的得票期望和小東持平,小東隨便拉一票即可
3.若小東的得票期望低於候選人中得票期望的最大值:
do
{
候選人中得票期望最大值-1,小東票數+1
} while(小東票數 >= 候選人中得票期望最大值)
if(小東票數 == 候選人中得票期望最大值)
小東目前票數 - 初始票數 + 1
else if(小東票數 > 候選人中得票期望最大值)
用Python實現:
while 1: a = int(input()) lst = map(int,raw_input().split()) xd = lst[0] beginxd = xd lst = lst[1:] if xd>max(lst): print 0 elif xd == max(lst): print 1 else: lst = sorted(lst,reverse=True) while 1: if xd < lst[0]: xd += 1 lst[0] -= 1 lst = sorted(lst, reverse=True) elif xd == lst[0]: print xd - beginxd + 1 break else: print xd - beginxd break結果: