[Python语法练习]CF 591 C - Save the Nature

解题思路:二分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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值