1888 - Cartonase: Difference between revisions
No edit summary |
|||
(2 intermediate revisions by the same user not shown) | |||
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 | 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 | 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 | *1 ⩽ n, m ⩽ 10.000 | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; | |||
;cartonasein.txt | |||
:2 5 | :2 5 | ||
:2 4 | :2 4 | ||
Line 29: | Line 30: | ||
:2 1 | :2 1 | ||
:Datele introduse corespund restrictiilor impuse | |||
;cartonaseout.txt | |||
:13 | :13 | ||
== Exemplul 2 == | == Exemplul 2 == | ||
; | |||
;cartonasein.txt | |||
:3 4 | :3 4 | ||
:-5 6 | :-5 6 | ||
Line 42: | Line 45: | ||
:-10 -6 | :-10 -6 | ||
:Datele introduse nu corespund restrictiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def | def este_input_valid(n, m, cartonase): | ||
if not (1 <= n <= 10000 and 1 <= m <= 10000): | |||
return False | |||
for x, y in cartonase: | |||
if not (1 <= x <= n and 1 <= y <= m): | |||
return False | |||
return True | |||
# Citire date de intrare | |||
with open("cartonasein.txt", "r") as f: | |||
n, m = map(int, f.readline().split()) | |||
cartonase = [tuple(map(int, f.readline().split())) for _ in range(n * m)] | |||
# Verificare validitate date de intrare | |||
if not este_input_valid(n, m, cartonase): | |||
print("Datele introduse nu corespund restricțiilor impuse.") | |||
else: | |||
# Inițializare matrice | |||
tabla = [[0] * m for _ in range(n)] | tabla = [[0] * m for _ in range(n)] | ||
for x, y in | # Parcurgere și actualizare valori pentru fiecare cartonaș | ||
for x, y in cartonase: | |||
tabla[x - 1][y - 1] = 1 # Se pune cartonașul pe tabla | |||
# Se actualizează vecinii | |||
if x > 1: | |||
tabla[x - 2][y - 1] += 1 # Vecinul din Nord | |||
if x < n: | |||
tabla[x][y - 1] += 1 # Vecinul din Sud | |||
if y > 1: | |||
tabla[x - 1][y - 2] += 1 # Vecinul din Vest | |||
if y < m: | |||
tabla[x - 1][y] += 1 # Vecinul din Est | |||
# Calcul suma numerelor de pe cartonașe | |||
# | suma = sum(tabla[i][j] for i in range(n) for j in range(m)) | ||
# | # Scriere rezultat în fișierul de ieșire | ||
with open("cartonaseout.txt", "w") as f: | |||
f.write(str(suma) + "\n") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 11:26, 29 December 2023
Cerinta[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
- 1 ⩽ n, m ⩽ 10.000
Exemplul 1[edit | edit source]
- cartonasein.txt
- 2 5
- 2 4
- 2 5
- 1 1
- 1 3
- 1 5
- 2 2
- 1 4
- 1 2
- 2 3
- 2 1
- Datele introduse corespund restrictiilor impuse
- cartonaseout.txt
- 13
Exemplul 2[edit | edit source]
- cartonasein.txt
- 3 4
- -5 6
- 1 1
- 0 5
- 9 -3
- -10 -6
- Datele introduse nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def este_input_valid(n, m, cartonase):
if not (1 <= n <= 10000 and 1 <= m <= 10000): return False
for x, y in cartonase: if not (1 <= x <= n and 1 <= y <= m): return False
return True
- Citire date de intrare
with open("cartonasein.txt", "r") as f:
n, m = map(int, f.readline().split()) cartonase = [tuple(map(int, f.readline().split())) for _ in range(n * m)]
- Verificare validitate date de intrare
if not este_input_valid(n, m, cartonase):
print("Datele introduse nu corespund restricțiilor impuse.")
else:
# Inițializare matrice tabla = [[0] * m for _ in range(n)]
# Parcurgere și actualizare valori pentru fiecare cartonaș for x, y in cartonase: tabla[x - 1][y - 1] = 1 # Se pune cartonașul pe tabla
# Se actualizează vecinii if x > 1: tabla[x - 2][y - 1] += 1 # Vecinul din Nord if x < n: tabla[x][y - 1] += 1 # Vecinul din Sud if y > 1: tabla[x - 1][y - 2] += 1 # Vecinul din Vest if y < m: tabla[x - 1][y] += 1 # Vecinul din Est
# Calcul suma numerelor de pe cartonașe suma = sum(tabla[i][j] for i in range(n) for j in range(m))
# Scriere rezultat în fișierul de ieșire with open("cartonaseout.txt", "w") as f: f.write(str(suma) + "\n")
</syntaxhighlight>
Explicatie[edit | edit source]
Suma cartonașelor este 13.