4201 - Sume Cuantice
Introducere
Prietenul vostru Turing vă cere din nou ajutorul! Acesta își dorește un calculator cuantic pentru a calcula o sumă colosală, imposibilă pentru orice om. Momentan nu dispune de resursele materiale și financiare pentru a lucra la nivel cuantic, așa că vă cere ajutorul!
Cerința
Se dă un șir cu N
elemente, numere naturale și un număr natural K
. Aveți la dispoziție următoarea operație care se poate folosi de maximum K
ori: se aleg doi indici i
si j
pentru care i % k = j % k
(1 ≤ i < j ≤ N
) și se interschimbă valorile acestor doi indici.
La final, după toate operațiile, trebuie să alegeți K
elemente consecutive, iar suma acestor K
elemente reprezinta scorul vostru. Turing trebuie sa obtina suma maximă și vă roagă să-l ajutați!
Date de intrare
Prima linie contine un numar T
, reprezentand numarul de teste. Fiecare test contine două linii.
Prima linie conține numerele N
și K
(1 ≤ K ≤ N ≤ 1000
), N
fiind numărul de elemente al șirului și K
numărul prezentat în cerință.
A doua linie conține N
numere întregi A1
, A2
, … , An
( 0 ≤ Ai
≤ 1000
), șirul de N
numere naturale.
Date de ieșire
Programul va afișa pe câte un rând nou suma maximă pentru fiecare dintre cele T
operații.
Restricții și precizări
1 ≤ T ≤ 1000
1 ≤ K ≤ N ≤ 1000
0 ≤ A[i] ≤ 1000
Exemplu:
Intrare
5 3 2 5 6 0 1 1 7 5 3 7 0 4 0 4 4 2 2 7 3 4 3 3 1000000000 1000000000 999999997
Ieșire
11 7 15 10 2999999997
Explicație
În primul caz, putem obține suma maximă 11
dacă alegem A1
, A2
fără să efectuăm nicio operație.
În al treilea caz, putem obține suma maximă 15
dacă interschimbăm A1
cu A4
, iar suma finală este alcatuită din elementele A3
, A4
, A5
.
Încărcare soluție
Lipește codul aici
1
def sume():
import sys
T, N, K = map(int, sys.stdin.readline().split())
A = list(map(int, sys.stdin.readline().split()))
B = [0] * K
for i in range(1, N+1):
B[i % K] = max(B[i % K], A[i])
ans = sum(B)
print(ans)