牛客網 網易2020.8.8筆試


有三種難度的題目分別為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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM