3959 - MaxSecvK: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==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 '''maxsecvk.in''' 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 '''maxsecvk.out''' va conține '''n–k+1''' numere întregi ce reprezintă valo...
 
No edit summary
 
Line 5: Line 5:
==Date de intrare==
==Date de intrare==


Fișierul de intrare '''maxsecvk.in''' conține pe prima linie două numere naturale nenule '''n''' și '''k''', iar pe a doua linie '''n''' numere întregi separate prin spații.
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==
==Date de ieșire==


Fișierul de ieșire '''maxsecvk.out''' va conține '''n–k+1''' numere întregi ce reprezintă valoarea maximă a tuturor secvențelor de lungime '''k'''.
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==
==Restricții și precizări==
Line 18: Line 18:
*prin secvență înțelegem elemente aflate pe poziții consecutive în șir
*prin secvență înțelegem elemente aflate pe poziții consecutive în șir


==Exemplu:==
==Exemplul 1:==


'''maxsecvk.in'''
'''maxsecvkin.txt'''


:9 3
9 3
:1 2 4 1 3 6 3 2 5
1 2 4 1 3 6 3 2 5


'''maxsecvk.out'''
'''maxsecvkout.txt'''


:4 4 4 6 6 6 5
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==
==Explicație==
Line 44: Line 55:
<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">


# Definim o functie care preia numele fisierelor de intrare si iesire ca argumente
def validare(nr_n, nr_k, numere):           # functia de validare a datelor de intrare
def max_subsequence(filename_in, filename_out):
     if nr_n < 1 or nr_n > 100000 or nr_k < 1 or nr_k > nr_n:
    # Deschidem fisierul de intrare pentru citire
         raise ValueError
     with open(filename_in, 'r') as file:
    for num in numere:
         # Citim prima linie si o impartim in doua numere, n si k
         if num < -1000000000 or num > 1000000000:
         n, k = map(int, file.readline().split())
            raise ValueError
         # Citim a doua linie, o impartim in numere si le stocam intr-o lista
    file_out.write("Datele de intrare corespund restrictiilor impuse\n")
        numbers = list(map(int, file.readline().split()))
 
 
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)


     # Calculam valoarea maxima pentru fiecare subsecventa de lungime k
     try:
    max_values = [max(numbers[i:i+k]) for i in range(n-k+1)]
        n, k = map(int, file_in.readline().split())
        numbers = list(map(int, file_in.readline().split()))


    # Deschidem fisierul de iesire pentru scriere
        validare(n, k, numbers)                 # apelul functiei de validare
    with open(filename_out, 'w') as file:
         max_subsequence(numbers, k)               # apelul functiei de rezolvare
        # Scriem fiecare valoare maxima in fisier, separate prin spatii
         for value in max_values:
            file.write(str(value) + ' ')


# Apelam functia cu numele fisierelor de intrare si iesire
    except ValueError:
max_subsequence('maxsecvk.in', 'maxsecvk.out')
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
    except IndexError:
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 20:53, 12 December 2023

Cerința[edit | edit source]

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

Date de intrare[edit | edit source]

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

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

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

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

maxsecvkin.txt

maxsecvk

maxsecvkout.txt

Datele de intrare nu corespund restrictiilor impuse

Explicație[edit | edit source]

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

<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>