小易有一些立方體,每個立方體的邊長為1,他用這些立方體搭了一些塔。
現在小易定義:這些塔的不穩定值為它們之中最高的塔與最低的塔的高度差。
小易想讓這些塔盡量穩定,所以他進行了如下操作:每次從某座塔上取下一塊立方體,並把它放到另一座塔上。
注意,小易不會把立方體放到它原本的那座塔上,因為他認為這樣毫無意義。
現在小易想要知道,他進行了不超過k次操作之後,不穩定值最小是多少。
第一行兩個數n,k (1 <= n <= 100, 0 <= k <= 1000)表示塔的數量以及最多操作的次數。
第二行n個數,ai(1 <= ai <= 104)表示第i座塔的初始高度。
第一行兩個數s, m,表示最小的不穩定值和操作次數(m <= k)
接下來m行,每行兩個數x,y表示從第x座塔上取下一塊立方體放到第y座塔上。
輸入
3 2
5 8 5
輸出
0 2
2 12 3
# -*- coding: utf-8 -*-
'''思路: 其實很簡單,每次排個序,然後從最大堆往最小堆搬乙個即可,
並記錄堆序號,直到最大堆-最小堆<1 或者 移動次數達到k。
這裡排序並保留堆序號的方法,是用的python內建的sort()函式,
當然也可以呼叫 numpy的argsort()。
'''# 為後面排序定義乙個方法
defby_value
(t):
return t[1]
# 讀入資料
n,k = list(map(int, input().split()))
a = list(map(int, input().split())) # a = [a1,a2,a3,...an]
#n,k = [3,2]
#a = [5,8,5]
# a_ = [[1, 5], [2, 8], [3, 5]] 其中每個元素表示:[第i堆,對應塔數]
a_ = [list(i) for i in zip(range(1,len(a)+1),a)]
# 先對a_從大到小排一次序
sorted_a = sorted(a_,key = by_value,reverse=true)
count = 0
move_record = # 快取搬移的記錄
while sorted_a[0][1]-1 >= sorted_a[-1][1]+1
and count+1
<=k:
max_index = sorted_a[0][0]
min_index = sorted_a[-1][0]
sorted_a[0][1] -= 1
# 從最多堆搬走乙個
sorted_a[-1][1] += 1
# 往最少堆搬來乙個
count += 1
sorted_a = sorted(sorted_a,key = by_value,reverse=true)
# 列印結果
s = sorted_a[0][1]-sorted_a[-1][1] # s:最小的不穩定值,即最小的差
print('{} {}'.format(s,count))
for i in move_record:
print('{} {}'.format(i[0],i[1]))
2016網易筆試程式設計題
有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎?每個輸入包含 1 個測試用例。每個測試資料的第一行包含乙個整數 n 1 n 50 表示學生的個數,接下...
程式設計 網易2019校招筆試程式設計題
題目 小易有乙個古老的遊戲機,上面有著經典的遊戲俄羅斯方塊。因為它比較古老,所以規則和一般的俄羅斯方塊不同。熒幕上一共有 n 列,每次都會有乙個 1 x 1 的方塊隨機落下,在同一列中,後落下的方塊會疊在先前的方塊之上,當一整行方塊都被佔滿時,這一行會被消去,並得到1分。有一天,小易又開了一局遊戲,...
2019網易實習程式設計題筆試
牛牛總是睡過頭,所以他定了很多鬧鐘,只有在鬧鐘響的時候他才會醒過來並且決定起不起床。從他起床算起他需要x分鐘到達教室,上課時間為當天的a時b分,請問他最晚可以什麼時間起床 輸入描述 每個輸入包含乙個測試用例。每個測試用例的第一行包含乙個正整數,表示鬧鐘的數量n n 100 接下來的n行每行包含兩個整...