1888 - Cartonase: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
Line 1: Line 1:
== Cerinta ==
== Cerinta ==


Vlad este pasionat de jocuri și vrea să vă propună unul. Pe o tablă cu n linii și m coloane, inițial goală, se așază la fiecare mutare un cartonaș în căsuța de coordonate x și y cu un număr pe el reprezentând numărul de vecini (Nord, Sud, Est, Vest) deja completați. Primul cartonaș pus este 0 deoarece nu este nimic completat încă. Întrebarea este care este suma tuturor numerelor de pe cartonașele așezate pe tabla după ce aceasta este completată?
Vlad este pasionat de jocuri și vrea să vă propună unul. Pe o tablă cu '''n''' linii și '''m''' coloane, inițial goală, se așază la fiecare mutare un cartonaș în căsuța de coordonate '''x''' și '''y''' cu un număr pe el reprezentând numărul de vecini (Nord, Sud, Est, Vest) deja completați. Primul cartonaș pus este '''0''' deoarece nu este nimic completat încă. Întrebarea este care este suma tuturor numerelor de pe cartonașele așezate pe tabla după ce aceasta este completată?


== Date de intrare ==
== Date de intrare ==


Fișierul de intrare cartonase.txt conține pe prima linie numerele n și m, și pe următoarele n*m linii câte o pereche de numere x și y cu semnificația că se pune un cartonaș în căsuța cu aceste coordonate.
Fișierul de intrare '''cartonasein.txt''' conține pe prima linie numerele '''n''' și '''m''', și pe următoarele '''n*m''' linii câte o pereche de numere x și y cu semnificația că se pune un cartonaș în căsuța cu aceste coordonate.


== Date de iesire ==
== Date de iesire ==


Fișierul de ieșire cartonase.txt va conține pe prima linie numărul S, reprezentând suma numerelor de pe cartonașe.
Fișierul de ieșire '''cartonaseout.txt''' va conține pe prima linie numărul '''S''', reprezentând suma numerelor de pe cartonașe.


== Restrictii si precizari ==
== Restrictii si precizari ==


*1 n, m 10.000
*1 ⩽ n, m ⩽ 10.000


== Exemplul 1 ==
== Exemplul 1 ==
;Intrare
;Intrare
;cartonasein.txt
:2 5
:2 5
:2 4
:2 4
Line 30: Line 31:


;Iesire
;Iesire
;Datele introduse corespund restrictiilor impuse
:Datele introduse corespund restrictiilor impuse
;cartonaseout.txt
:13
:13


== Exemplul 2 ==
== Exemplul 2 ==
;Intrare
;Intrare
;cartonasein.txt
:3 4
:3 4
:-5 6
:-5 6
Line 43: Line 46:


;Iesire
;Iesire
;Datele introduse nu corespund restrictiilor impuse
:Datele introduse nu corespund restrictiilor impuse




Line 69: Line 72:
def main():
def main():
     # Citirea datelor de intrare din fișier
     # Citirea datelor de intrare din fișier
     with open("cartonase.txt", "r") as f:
     with open("cartonasein.txt", "r") as f:
         n, m = map(int, f.readline().split())
         n, m = map(int, f.readline().split())
         mutari = [tuple(map(int, f.readline().split())) for _ in range(n * m)]
         mutari = [tuple(map(int, f.readline().split())) for _ in range(n * m)]
Line 77: Line 80:


     # Scrierea rezultatului în fișierul de ieșire
     # Scrierea rezultatului în fișierul de ieșire
     with open("cartonase.txt", "w") as g:
     with open("cartonaseout.txt", "w") as g:
         g.write(str(rezultat))
         g.write(str(rezultat))



Revision as of 08:35, 27 December 2023

Cerinta

Vlad este pasionat de jocuri și vrea să vă propună unul. Pe o tablă cu n linii și m coloane, inițial goală, se așază la fiecare mutare un cartonaș în căsuța de coordonate x și y cu un număr pe el reprezentând numărul de vecini (Nord, Sud, Est, Vest) deja completați. Primul cartonaș pus este 0 deoarece nu este nimic completat încă. Întrebarea este care este suma tuturor numerelor de pe cartonașele așezate pe tabla după ce aceasta este completată?

Date de intrare

Fișierul de intrare cartonasein.txt conține pe prima linie numerele n și m, și pe următoarele n*m linii câte o pereche de numere x și y cu semnificația că se pune un cartonaș în căsuța cu aceste coordonate.

Date de iesire

Fișierul de ieșire cartonaseout.txt va conține pe prima linie numărul S, reprezentând suma numerelor de pe cartonașe.

Restrictii si precizari

  • 1 ⩽ n, m ⩽ 10.000

Exemplul 1

Intrare
cartonasein.txt
2 5
2 4
2 5
1 1
1 3
1 5
2 2
1 4
1 2
2 3
2 1
Iesire
Datele introduse corespund restrictiilor impuse
cartonaseout.txt
13

Exemplul 2

Intrare
cartonasein.txt
3 4
-5 6
1 1
0 5
9 -3
-10 -6
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def calcul_suma_cartonase(n, m, mutari):

   tabla = [[0] * m for _ in range(n)]
   for x, y in mutari:
       tabla[x][y] += 1  # Incrementăm numărul de vecini pentru căsuța respectivă
       # Actualizăm vecinii căsuței
       if x > 0:
           tabla[x - 1][y] += 1  # Vecinul din Nord
       if x < n - 1:
           tabla[x + 1][y] += 1  # Vecinul din Sud
       if y > 0:
           tabla[x][y - 1] += 1  # Vecinul din Vest
       if y < m - 1:
           tabla[x][y + 1] += 1  # Vecinul din Est
   suma = sum(sum(row) for row in tabla)
   return suma

def main():

   # Citirea datelor de intrare din fișier
   with open("cartonasein.txt", "r") as f:
       n, m = map(int, f.readline().split())
       mutari = [tuple(map(int, f.readline().split())) for _ in range(n * m)]
   # Calcularea și afișarea rezultatului
   rezultat = calcul_suma_cartonase(n, m, mutari)
   # Scrierea rezultatului în fișierul de ieșire
   with open("cartonaseout.txt", "w") as g:
       g.write(str(rezultat))

if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicatie

Suma cartonașelor este 13.