zoukankan      html  css  js  c++  java
  • [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
    
  • 相关阅读:
    python 单下划线/双下划线使用总结
    error connection reset by peer 104
    变形课
    求并联电阻值
    HDU2054:A == B ?
    Do the Untwist
    开门人和关门人
    关于HEXO安装失败的解决方法
    代码高亮显示——google-code-prettify
    网站图标——favicon
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270332.html
Copyright © 2011-2022 走看看