0669 - Lin Col

From Bitnami MediaWiki
Revision as of 12:24, 22 April 2023 by Andor Giulia (talk | contribs) (Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/669/lincol] == Cerinţa == Se dă o matrice cu '''n''' linii și '''m''' coloane și elemente numere naturale. Se cere să se determine suma elementelor de pe anumite linii și coloane, precizate. == Date de intrare == Fișierul de intrare '''lincol.in''' va conține pe prima linie numerele '''n m''', Următoarele '''n''' linii conțin câte '''m''' numere naturale, separate prin spații, reprezentând elementele matricei. Următoarea l...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursă: [1]

Cerinţa[edit | edit source]

Se dă o matrice cu n linii și m coloane și elemente numere naturale. Se cere să se determine suma elementelor de pe anumite linii și coloane, precizate.

Date de intrare[edit | edit source]

Fișierul de intrare lincol.in va conține pe prima linie numerele n m, Următoarele n linii conțin câte m numere naturale, separate prin spații, reprezentând elementele matricei. Următoarea linie conține numărul de întrebări, p, iar fiecare dintre următoarele p linii conține câte o întrebare, de forma Q I, unde Q poate fi unul dintre caracterele L sau C, iar I este un număr natural. Dacă Q = L, se cere determinarea sumei elementelor de pe linia I, iar dacă Q = C se cere determinarea sumei elementelor de pe coloana I.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.". Fișierul de ieșire lincol.outva conține p linii, fiecare conținând, în ordine, răspunsul la întrebarea corespunzătoare. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări[edit | edit source]

  • 1 ≤ n , m ≤ 100
  • elementele matricei sunt numere naturale mai mici decât 1.000.000
  • 1 ≤ p ≤ 100
  • liniile sunt numerotate de la 1 la n, iar coloanele de la 1 la m

Exemple[edit | edit source]

Exemplu 1[edit | edit source]

lincol.in
4 5
4 7 5 4 2
1 1 2 3 4
2 2 0 0 3
4 8 2 6 1
6
C 2
L 1
C 3
C 5
L 4
C 3
lincol.out
18
22
9
10
21
9

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1"> def citire_matrice():

   # Deschide fișierul de intrare și citește n, m și matricea
   with open("lincol.in", "r") as fin:
       n, m = map(int, fin.readline().split())
       if not (1 <= n <= 100 and 1 <= m <= 100):
           print("Datele nu sunt conform restrictiilor impuse.")
           exit()
       matrice = []
       # Citește matricea din fișierul de intrare
       for i in range(n):
           row = list(map(int, fin.readline().split()))
           # Verifică dacă elementele matricei sunt conform cerințelor
           if not all(x <= 1000000 for x in row):
               print("Datele nu sunt conform restrictiilor impuse.")
               exit()
           matrice.append(row)
       # Citește numărul de întrebări
       p = int(fin.readline())
       intrebari = []
       # Citește întrebările din fișierul de intrare
       for i in range(p):
           linie = fin.readline().split()
           intrebare = {'tip': linie[0], 'index': int(linie[1])}
           intrebari.append(intrebare)
       return n, m, matrice, intrebari


def LinCol(n, m, matrice, intrebari):

   with open("lincol.out", "w") as fout:
       for intrebare in intrebari:
           s = 0
           if intrebare['tip'] == 'C':
               for i in range(n):
                   s += matrice[i][intrebare['index'] - 1]
           elif intrebare['tip'] == 'L':
               for j in range(m):
                   s += matrice[intrebare['index'] - 1][j]
           fout.write(str(s) + "\n")

if _name_ == "_main_":

   n, m, matrice, intrebari = citire_matrice()
   LinCol(n, m, matrice, intrebari)

</syntaxhighlight>

Explicații[edit | edit source]

Acesta este un program Python care citeste o matrice dintr-un fisier de intrare, efectueaza operatii de suma pe coloane sau linii ale matricei, si afiseaza rezultatele intr-un fisier de iesire.
Functia citire_matrice() citeste dimensiunile matricei si elementele acesteia din fisierul de intrare. De asemenea, citeste numarul de intrebari si construieste o lista de dictionare, unde fiecare dictionar contine tipul de intrebare (linie sau coloana) si indexul acesteia. Functia returneaza toate aceste informatii.
Functia LinCol() efectueaza operatiile de suma cerute in intrebari si afiseaza rezultatele in fisierul de iesire. Pentru fiecare intrebare, functia parcurge linia sau coloana corespunzatoare si calculeaza suma elementelor. Rezultatul este afisat in fisierul de iesire.
In if _name_ == "_main_": se apeleaza functia citire_matrice() pentru a obtine informatiile necesare, si apoi se apeleaza functia LinCol() pentru a efectua operatiile si afisa rezultatele.