牛客网 网易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()












种一棵树最好的时间是十年前,其次是现在。
原文地址:https://www.cnblogs.com/islch/p/13460819.html