4201 - Sume Cuantice: Difference between revisions

From Bitnami MediaWiki
Raul (talk | contribs)
No edit summary
Raul (talk | contribs)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 52: Line 52:


=== Lipește codul aici ===
=== Lipește codul aici ===
1
<syntaxhighlight lang="python" line="1">
​import sys
def sume():
 
import sys
T, N, K = map(int, sys.stdin.readline().split())
T, N, K = map(int, sys.stdin.readline().split())
 
A = list(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 = [0] * K
    B[i % K] = max(B[i % K], A[i])
 
ans = sum(B)
for i in range(1, N+1):
print(ans)
 
    B[i % K] = max(B[i % K], A[i])
</syntaxhighlight>
 
ans = sum(B)
 
print(ans)

Latest revision as of 14:09, 14 December 2023

Introducere[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 1 ≤ T ≤ 1000
  • 1 ≤ K ≤ N ≤ 1000
  • 0 ≤ A[i] ≤ 1000

Exemplu:[edit | edit source]

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[edit | edit source]

Î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[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="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) ​ </syntaxhighlight>