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