2429 - matrice9: Difference between revisions

From Bitnami MediaWiki
Line 28: Line 28:
== Exemplul 1 ==
== Exemplul 1 ==


; intrare
; matrice9in.txt


:2 6
:2 6
Line 36: Line 36:
:3 4 3 5 1 10
:3 4 3 5 1 10


; iesire
; matrice9out.txt


:Datele introduse corespund restrictiilor impuse.  
:Datele introduse corespund restrictiilor impuse.  

Revision as of 21:23, 8 January 2024

Enunt

Fie A o matrice dreptunghiulară de numere întregi cu N linii numerotate de la 1 la N şi M coloane numerotate de la 1 la M. În matricea A oricare două elemente consecutive de pe aceeaşi linie sunt distincte. Se defineşte un şir valid de numere întregi ca fiind fie un şir crescător, fie un şir descrescător, fie un şir crescător concatenat cu un şir descrescător, fie un şir descrescător concatenat cu unul crescător. Exemple de şiruri valide sunt: 1 2 3 7, 8 5 2 1, 3 5 6 2, 4 1 5 6. Se defineşte o submatrice a lui A de coordonate (l1, c1, l2, c2) ca fiind matricea formată din toate elementele A(i,j), cu l1 ≤ i ≤ l2 şi c1 ≤ j ≤ c2. O submatrice a lui A este validă dacă liniile sale sunt şiruri valide. Atenţie! O submatrice validă poate avea pe o linie un şir crescător de numere, pe a doua un şir descrescător, pe a treia un şir crescător concatenat cu unul descrescător etc. Deci, liniile unei submatrice valide nu trebuie să fie neapărat şiruri de acelaşi tip. Aria unei submatrice este egală cu numărul de elemente din care este formată submatricea.

Cerinta

Se cere să se găsească o submatrice validă a lui A de arie maximă.

Date de intrare

Fișierul de intrare matrice9.in conține pe prima linie numerele N şi M, separate prin spaţiu. Pe fiecare dintre următoarele N linii se află câte M numere întregi separate prin câte un spaţiu, reprezentând elementele matricei A.

Date de iesire

Fișierul de ieșire matrice9.out va conţine o singură linie pe care vor fi scrise coordonatele l1, c1, l2, c2 (în această ordine şi separate prin câte un spaţiu) ale unei submatrice valide de arie maximă. În cazul în care există mai multe soluţii cu arie maximă, se va afişa oricare dintre ele.

Restrictii si precizari

  • 1 ≤ N, M ≤ 1000
  • 70% din teste vor avea N, M ≤ 600
  • Elementele matricei A sunt numere întregi din intervalul [-30000, 30000].

Exemplul 1

matrice9in.txt
2 6
1 2 5 7 9 10
3 4 3 5 1 10
matrice9out.txt
Datele introduse corespund restrictiilor impuse.
1 1 2 3

Exemplul 2

intrare
3 7
2 3 6 8 10 11
4 5 4 6 2 11
iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

<syntaxhighlight lang="python3"line="1">

  1. 2429 - matrice9

def este_sir_valid(sir):

def este_submatrice_valida(matrice, l1, c1, l2, c2):

   for i in range(l1, l2 + 1):
       linie_submatrice = matrice[i][c1:c2 + 1]
       if not este_sir_valid(linie_submatrice):
           return False
   return True

def calculeaza_aria_submatrice(matrice, l1, c1, l2, c2):

   # Calculează aria unei submatrice
   return (l2 - l1 + 1) * (c2 - c1 + 1)

def gaseste_submatrice_maxima(matrice):

   # Găsește și returnează submatricea de dimensiuni maxime care este validă
   max_aria = 0
   coordonate_maxime = None
   for l1 in range(len(matrice)):
       for c1 in range(len(matrice[0])):
           for l2 in range(l1, len(matrice)):
               for c2 in range(c1, len(matrice[0])):
                   if este_submatrice_valida(matrice, l1, c1, l2, c2):
                       aria = calculeaza_aria_submatrice(matrice, l1, c1, l2, c2)
                       if aria > max_aria:
                           max_aria = aria
                           coordonate_maxime = (l1, c1, l2, c2)
   return coordonate_maxime

</syntaxhighlight>