選舉遊戲(京東2016實習生真題)

題目描述
									

小東和其他小朋友正在玩一個關於選舉的遊戲。選舉是通過投票的方式進行的,得票最多的人將獲勝。

小東是編號爲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
結果:



發佈了35 篇原創文章 · 獲贊 42 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章