有三種難度的題目分別為Easy/Medium/Hard,現在你總共有E+EM+M+MH+H道題,各個字符串的含義如下:
某個公眾號總結在這里
E表示有E道題目難度為Easy
EM表示有EM道題目難度為Easy或者Medium
M表示有M道題目難度為Medium
MH表示有MH道題目難度為Medium或者Hard
H表示有H道題目難度為Hard
你要用這些題目出盡量多的模擬賽,為了保證題目質量且含有一定的區分量,每場模擬賽需要包含Easy Medium Hard三種難度的題目各一道,每道題目至多只能出現在一場比賽中。求你最多能出多少場模擬賽
輸入描述
一行五個整數,E,EM,M,MH,H
0 <= E+EM+M+MH+H <= 10^18
輸出描述
輸出你最多能出多少場模擬賽
示例1
輸入
2 2 1 2 2
輸出
3
說明
三組分別是
E + EM + H
E + MH + H
EM + M + MH
思路:二分查找,限定值mid后判斷該值是不是可以滿足
先對E和H進行處理,補到mid的大小,然后在計算剩下的M和MH、EM的和能不能達到mid
def main():
[E, EM, M, MH, H] = list(map(int, input().split()))
max_val = (E + EM + M + MH + H) // 3
def find(i, E, EM, M, MH, H):
if E < i:
cur = min(i - E, EM)
E += cur
EM -= cur
if H < i:
cur = min(i - H, MH)
H += cur
MH -= cur
if M + EM + MH >= i and E >= i and H >= i:
return True
return False
res = 0
left, right = 0, max_val
while left <= right:
mid = (left + right) // 2
if find(mid, E, EM, M, MH, H):
left = mid + 1
res = max(res, mid)
else:
right = mid - 1
print(res)
main()