根据间隔分组,也就是
和
是一组的,然后对于每一个组内元素,由于操作只能够加,不能减,所以所有元素一定会变为最大值。
设每一个组的最大值为,个数为
,总和为
,那么代价为
。
那么求出所有组的总需求量,如果
不够,那么直接返回
。
然后将扣除后剩下的
贪心的全部分给一组,那么就只要枚举组,记录哪一个最大即可。
import sys
# 输入加速
input = sys.stdin.readline
if __name__ == '__main__':
t = int(input())
for _ in range(t):
n, k, x = map(int, input().split())
a = list(map(int, input().split()))
mp = []
for i in range(k):
lst = []
for j in range(i, n, k):
lst.append(a[j])
mp.append(lst)
# 计算need
need = 0
sz = set()
for lst in mp:
if len(lst) > 1:
need += len(lst) * max(lst) - sum(lst)
sz.add(len(lst))
if need > x:
print(-1)
continue
x -= need
#计算每一组变大后的最大值
res = 0
for lst in mp:
res = max(x // len(lst) + max(lst),res)
print(res)