2412 - Sub Mat 1: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
Se consideră o matrice A cu următoarele proprietăţi: | Se consideră o matrice <code>A</code> cu următoarele proprietăţi: | ||
*conţine n linii şi m coloane; | |||
*conţine doar valorile 0 şi 1; | * conţine <code>n</code> linii şi <code>m</code> coloane; | ||
*pe fiecare linie valorile sunt plasate în ordine crescătoare. | * conţine doar valorile <code>0</code> şi <code>1</code>; | ||
Definim o submatrice determinată de perechea de linii L1 şi L2 (L1 ≤ L2) şi de perechea de coloane C1 şi C2 (C1 ≤ C2) ca fiind totalitatea elementelor matricei A[i,j] pentru care L1 ≤ i ≤ L2 şi C1 ≤ j ≤ C2. | * pe fiecare linie valorile sunt plasate în ordine crescătoare. | ||
Dacă toate elementele unei submatrice sunt egale cu 0, atunci submatricea se numeşte nulă. | |||
Asupra matricei A putem efectua una sau mai multe operaţii de interschimbări de linii. Prin astfel de interschimbări liniile matricei pot fi rearanjate astfel încât matricea A să conţină cel puţin o submatrice nulă cu număr maxim de elemente. | Definim o submatrice determinată de perechea de linii <code>L1</code> şi <code>L2</code> (<code>L1 ≤ L2</code>) şi de perechea de coloane <code>C1</code> şi <code>C2</code> (<code>C1 ≤ C2</code>) ca fiind totalitatea elementelor matricei <code>A[i,j]</code> pentru care <code>L1 ≤ i ≤ L2</code> şi <code>C1 ≤ j ≤ C2</code>. | ||
Dacă toate elementele unei submatrice sunt egale cu <code>0</code>, atunci submatricea se numeşte nulă. | |||
Asupra matricei <code>A</code> putem efectua una sau mai multe operaţii de interschimbări de linii. Prin astfel de interschimbări liniile matricei pot fi rearanjate astfel încât matricea <code>A</code> să conţină cel puţin o submatrice nulă cu număr maxim de elemente. | |||
= Cerința = | |||
Fiind dată o astfel de matrice se cere să se determine numărul maxim de zerouri dintr-o submatrice nulă ce se poate obţine printr-o rearanjare a liniilor matricei date. | Fiind dată o astfel de matrice se cere să se determine numărul maxim de zerouri dintr-o submatrice nulă ce se poate obţine printr-o rearanjare a liniilor matricei date. | ||
= Date de intrare = | |||
Fișierul de intrare <code>submat1IN.txt</code> conţine pe prima linie două numere naturale <code>n m</code>, separate printr-un spaţiu, reprezentând numărul de linii, respectiv numărul de coloane ale matricei <code>A</code>. Pe următoarele <code>n</code> linii ale fişierului sunt descrise cele <code>n</code> linii ale matricei <code>A</code>; pe fiecare linie din cele <code>n</code> vor fi scrise câte <code>m</code> valori din mulţimea <code>{0, 1}</code>, separate prin spaţii, reprezentând în ordine elementele liniei respective. | |||
= Date de ieșire = | |||
Fișierul de ieșire <code>submat1OUT.txt</code> va conţine o singură linie pe care va fi scris un număr natural reprezentând numărul maxim de elemente pe care îl conţine o submatrice nulă rezultată în urma rearanjărilor liniilor matricei <code>A</code>. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Datele nu corespund restrictiilor impuse". | |||
= Restricții și precizări = | |||
* <code>2 ≤ n, m ≤ 1000</code> | |||
* Pentru <code>60%</code> din teste <code>n, m ≤ 100</code>. | |||
= Exemplul 1: = | |||
<code>submat1IN.txt</code> | |||
3 5 | |||
0 0 0 1 1 | |||
0 1 1 1 1 | |||
0 0 0 0 1 | |||
<code>submat1OUT.txt</code> | |||
6 | |||
=== Explicație === | |||
Dacă rearanjăm liniile astfel încât matricea rezultată să fie următoarea: | |||
<code>0 0 0 1 1</code> | |||
<code>0 0 0 0 1</code> | |||
<code>0 1 1 1 1</code> | |||
atunci se observă că submatricea determinată de prima şi a doua linie şi de prima şi a treia coloană conţine <code>6</code> valori de <code>0</code> (<code>6</code> fiind numărul maxim posibil). | |||
== Exemplul 2: == | |||
<code>submat1IN.txt</code> | |||
1 5 | |||
0 0 0 1 1 | |||
0 1 1 1 1 | |||
0 0 0 0 1 | |||
<code>submat1OUT.txt</code> | |||
Datele nu corespund restrictiilor impuse | |||
== Rezolvare == | |||
def | <syntaxhighlight lang="python" line="1"> | ||
def verifica_restricii(n, m): | |||
return 2 <= n <= 1000 and 2 <= m <= 1000 | |||
def main(): | def main(): | ||
with open( | with open('submat1IN.txt', 'r') as fin: | ||
n, m = map(int, | n, m = map(int, fin.readline().split()) | ||
if not verifica_restricii(n, m): | |||
with open('submat1OUT.txt', 'w') as fout: | |||
fout.write("Datele nu corespund restrictiilor impuse\n") | |||
return | |||
a = [0] * n | |||
with open('submat1IN.txt', 'r') as fin: | |||
next(fin) | |||
for i in range(n): | |||
linie = list(map(int, fin.readline().split())) | |||
a[i] = linie.count(0) | |||
a.sort(reverse=True) | |||
aria = 0 | |||
for i in range(n): | |||
if aria < (i + 1) * a[i]: | |||
aria = (i + 1) * a[i] | |||
with open( | with open('submat1OUT.txt', 'w') as fout: | ||
fout.write(str(aria) + '\n') | |||
if __name__ == | if __name__ == '__main__': | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 15:05, 18 May 2024
Se consideră o matrice A
cu următoarele proprietăţi:
- conţine
n
linii şim
coloane; - conţine doar valorile
0
şi1
; - pe fiecare linie valorile sunt plasate în ordine crescătoare.
Definim o submatrice determinată de perechea de linii L1
şi L2
(L1 ≤ L2
) şi de perechea de coloane C1
şi C2
(C1 ≤ C2
) ca fiind totalitatea elementelor matricei A[i,j]
pentru care L1 ≤ i ≤ L2
şi C1 ≤ j ≤ C2
.
Dacă toate elementele unei submatrice sunt egale cu 0
, atunci submatricea se numeşte nulă.
Asupra matricei A
putem efectua una sau mai multe operaţii de interschimbări de linii. Prin astfel de interschimbări liniile matricei pot fi rearanjate astfel încât matricea A
să conţină cel puţin o submatrice nulă cu număr maxim de elemente.
Cerința[edit | edit source]
Fiind dată o astfel de matrice se cere să se determine numărul maxim de zerouri dintr-o submatrice nulă ce se poate obţine printr-o rearanjare a liniilor matricei date.
Date de intrare[edit | edit source]
Fișierul de intrare submat1IN.txt
conţine pe prima linie două numere naturale n m
, separate printr-un spaţiu, reprezentând numărul de linii, respectiv numărul de coloane ale matricei A
. Pe următoarele n
linii ale fişierului sunt descrise cele n
linii ale matricei A
; pe fiecare linie din cele n
vor fi scrise câte m
valori din mulţimea {0, 1}
, separate prin spaţii, reprezentând în ordine elementele liniei respective.
Date de ieșire[edit | edit source]
Fișierul de ieșire submat1OUT.txt
va conţine o singură linie pe care va fi scris un număr natural reprezentând numărul maxim de elemente pe care îl conţine o submatrice nulă rezultată în urma rearanjărilor liniilor matricei A
. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Datele nu corespund restrictiilor impuse".
Restricții și precizări[edit | edit source]
2 ≤ n, m ≤ 1000
- Pentru
60%
din testen, m ≤ 100
.
Exemplul 1:[edit | edit source]
submat1IN.txt
3 5 0 0 0 1 1 0 1 1 1 1 0 0 0 0 1
submat1OUT.txt
6
Explicație[edit | edit source]
Dacă rearanjăm liniile astfel încât matricea rezultată să fie următoarea:
0 0 0 1 1
0 0 0 0 1
0 1 1 1 1
atunci se observă că submatricea determinată de prima şi a doua linie şi de prima şi a treia coloană conţine 6
valori de 0
(6
fiind numărul maxim posibil).
Exemplul 2:[edit | edit source]
submat1IN.txt
1 5 0 0 0 1 1 0 1 1 1 1 0 0 0 0 1
submat1OUT.txt
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1"> def verifica_restricii(n, m):
return 2 <= n <= 1000 and 2 <= m <= 1000
def main():
with open('submat1IN.txt', 'r') as fin: n, m = map(int, fin.readline().split())
if not verifica_restricii(n, m): with open('submat1OUT.txt', 'w') as fout: fout.write("Datele nu corespund restrictiilor impuse\n") return a = [0] * n with open('submat1IN.txt', 'r') as fin: next(fin) for i in range(n): linie = list(map(int, fin.readline().split())) a[i] = linie.count(0)
a.sort(reverse=True) aria = 0 for i in range(n): if aria < (i + 1) * a[i]: aria = (i + 1) * a[i]
with open('submat1OUT.txt', 'w') as fout: fout.write(str(aria) + '\n')
if __name__ == '__main__':
main()
</syntaxhighlight>