題解 P1080 國王遊戲

2022-05-08 01:48:08 字數 1059 閱讀 9630

題目鏈結

題目大意:有很多個人,每個人左手上有乙個數\(l_i\),右手有乙個數\(r_i\) 重新安排佇列順序(國王位置不能動),使得\(max\^l_i} \rfloor\}\)盡量小

貪心

這題的貪心應該還是非常好想的,只不過要寫高精度就實在有些噁心了(主要是我懶),於是乎,我就直接上了python

詳細都在注釋裡了:

class person: # 以person這個類來表示每個人,l表示左手的數,r表示右手的數

def __init__(self,l,r): # 這個特殊的__init__方法就相當於c++中類的建構函式

self.l = l

self.r = r

def __lt__(self,rhs): # 過載小於運算子,用於下面貪心排序

return self.l * self.r < rhs.l * rhs.r

# list存放每個人(包括國王)

persons =

n = int(input())

for i in range(1,n + 2):

temp = input() # 因為python中input()每次讀入一整行,返回乙個string,所以要用split方法來拆分字串

a = int(temp.split(" ")[0]) # 第乙個數

b = int(temp.split(" ")[1]) # 第二個數

sa = persons[0].l # sa為累乘器,為這個人前面所有人左手上數的乘積,第乙個人就是國王

ans = 0

persons = sorted(persons[1:]) # 排序,因為國王總是在佇列的第乙個,所以我們不能對國王排序

for p in persons:

ans = max(ans,sa // p.r) # 向下取整,所以//地板除

sa *= p.l

print(ans)

不得不說,python的語法還是非常簡潔的(要不是我太菜了可以更加簡潔)

P1080 國王遊戲

題目描述 恰逢 h h國國慶,國王邀請 nn 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 nn 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前...

P1080 國王遊戲

恰逢 hh h國國慶,國王邀請n nn 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 nnn 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的...

P1080 國王遊戲

恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...