2019網易秋招筆試 程式設計題 塔

2021-08-23 14:26:01 字數 1756 閱讀 7273

小易有一些立方體,每個立方體的邊長為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行每行包含兩個整...