題目鏈結
題目大意:有很多個人,每個人左手上有乙個數\(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 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...