[Python语法练习]CF 591 C

解题思路:二分check 代码比较长 所以拿来练习一下py

语法总结:

新建空list

arr = [] 

定义函数 

def (参数1, 参数2, 参数3):

    return 任意类型列表


python 默认向负无穷取整 整除 // 即为 C++ 的floor


输入一个列表

arr = [int(len) for len in input().split()]

代码:

arr = []
sxy = []
sx = []
sy = []
n = 0
x = 0
a = 0
y = 0
b = 0
k = 0

def check (now):
    p = 0
    ret = 0
    for i in sxy:
        if i > now:
            break
        else:
            ret = ret + arr[p] * (x + y) // 100
            p = p + 1
        
    if x >= y:
        for i in sx:
            if i > now:
                break
            else:
                ret = ret + arr[p] * x // 100
                p = p + 1
        for i in sy:
            if i > now:
                break
            else:
                ret = ret + arr[p] * y // 100
                p = p + 1
    else:
        for i in sy:
            if i > now:
                break
            else:
                ret = ret + arr[p] * y // 100
                p = p + 1
        for i in sx:
            if i > now:
                break
            else:
                ret = ret + arr[p] * x // 100
                p = p + 1

    return ret >= k


n = int(input())

while n :
    len = int(input())

    arr.clear()
    
    arr = [int(len) for len in input().split()]
    
    x, a = map(int, input().split())
    y, b = map(int, input().split())

    k = int(input())
    
    arr.sort(reverse=True)

    sxy.clear()
    sx.clear()
    sy.clear()

    for i in range(1, len + 1):
        if i % a == 0 and i % b == 0:
            sxy.append(i)
        elif i % a == 0:
            sx.append(i)
        elif i % b == 0:
            sy.append(i)
        
    fst = 0
    lst = len
    ans = 0

    if not check(len):
        print('-1')
    else:

        while(fst <= lst):
            mid = (fst + lst) // 2
            if check(mid):
                lst = mid - 1
                ans = mid
            else:
                fst = mid + 1

        print(ans)
    
    n = n - 1
原文地址:https://www.cnblogs.com/zeolim/p/12270332.html