3959 - MaxSecvK

From Bitnami MediaWiki
Revision as of 20:53, 12 December 2023 by Bonte Lucas Gabriel (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința

Se consideră un șir A de n numere întregi. Pentru fiecare subsecvență de lungimea k să se afișeze valoarea maximă.

Date de intrare

Fișierul de intrare maxsecvkin.txt conține pe prima linie două numere naturale nenule n și k, iar pe a doua linie n numere întregi separate prin spații.

Date de ieșire

Fișierul de ieșire maxsecvkout.txt va conține n–k+1 numere întregi ce reprezintă valoarea maximă a tuturor secvențelor de lungime k.

Restricții și precizări

  • 1 ≤ n ≤ 100.000
  • 1 ≤ k ≤ n
  • -1.000.000.000 ≤ Ai ≤ -1.000.000.000
  • prin secvență înțelegem elemente aflate pe poziții consecutive în șir

Exemplul 1:

maxsecvkin.txt

9 3
1 2 4 1 3 6 3 2 5

maxsecvkout.txt

Datele de intrare corespund restrictiilor impuse
4 4 4 6 6 6 5

Exemplul 2:

maxsecvkin.txt

maxsecvk

maxsecvkout.txt

Datele de intrare nu corespund restrictiilor impuse

Explicație

Se vor afișa 7 numere. Maximul secvenței 1 2 4 este 4 Maximul secvenței 2 4 1 este 4 Maximul secvenței 4 1 3 este 4 Maximul secvenței 1 3 6 este 6 Maximul secvenței 3 6 3 este 6 Maximul secvenței 6 3 2 este 6 Maximul secvenței 3 2 5 este 5

Rezolvare

<syntaxhighlight lang="python" line="1" start="1">

def validare(nr_n, nr_k, numere): # functia de validare a datelor de intrare

   if nr_n < 1 or nr_n > 100000 or nr_k < 1 or nr_k > nr_n:
       raise ValueError
   for num in numere:
       if num < -1000000000 or num > 1000000000:
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def max_subsequence(numere, nr_k): # functia de rezolvare

   max_values = [max(numere[i:i + nr_k]) for i in range(len(numere) - nr_k + 1)]
   for value in max_values:
       file_out.write(str(value) + ' ')


if __name__ == '__main__':

   file_in = open('maxsecvkin.txt', 'r')         # declararea fisierelor
   file_out = open('maxsecvkout.txt', 'w')       # fisierul out trebuie declarat cu optiunea "w" (write)
   try:
       n, k = map(int, file_in.readline().split())
       numbers = list(map(int, file_in.readline().split()))
       validare(n, k, numbers)                 # apelul functiei de validare
       max_subsequence(numbers, k)               # apelul functiei de rezolvare
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>