1751 - Icsuri: Difference between revisions
Benzar Ioan (talk | contribs) Pagină nouă: == Cerința == Într-un regat îndepărtat, există un joc popular printre copii numit "X-uri Magice". În acest joc, copiii desenează două matrici pătratice și încearcă să găsească toate valorile comune dintre cele două matrici. Fiecare matrice este formată din numere întregi, iar scopul este de a găsi toate numerele comune (valori identice) din cele două matrici și să le ordoneze într-o listă crescătoare. == Date de intrare == Programul citește de la tas... |
Benzar Ioan (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
== Cerința == | == Cerința == | ||
În clasa a IX-a A sunt M elevi, numerotați de la 1 la M și fiecare are un număr preferat P. Plictisiți de ora de informatică, au inventat următorul joc: | |||
pe o foaie de matematică desenează o tablă de joc de dimensiune N, formată din N linii și N coloane, numerotate de la 1 la N; fiecare linie și fiecare coloană are câte N pătrățele | |||
fiecare elev alege un pătrățel și desenează un X centrat în pătrățelul ales, fiecare din cele 4 laturi având cel mult P pătrățele desenate, fără a ieși de pe tabla de joc (să nu mâzgălească banca!!). | |||
icsurile desenate de elevi se pot suprapune. | |||
Cunoscând dimensiunea N a tablei de joc, numărul M de elevi, coordonatele alese de fiecare elev și numărul preferat al fiecărui elev, determinați câte pătrățele de pe tablă rămân nedesenate. | |||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură | Programul citește de la tastatură numărul N M, iar apoi M triplete i j p, reprezentând coordonatele pătrățelului ales și numărul preferat de fiecare elev. | ||
== Date de ieșire == | == Date de ieșire == | ||
Programul va afișa pe ecran numărul de pătrățele nedesenate. | |||
== Restricții și precizări == | == Restricții și precizări == | ||
* 1 | *1 ≤ N ≤ 1000 | ||
*1 ≤ M ≤ 100000 | |||
*1 ≤ i,j ≤ N | |||
*0 ≤ p ≤ N/2 | |||
== Exemplu 1 == | == Exemplu 1 == | ||
;Intrare | ;Intrare | ||
10 5<br> | |||
1 2 | 1 2 1<br> | ||
6 6 3<br> | |||
7 | 7 3 2<br> | ||
3<br> | 2 5 2<br> | ||
9 8 3 | |||
;Iesire | ;Iesire | ||
62 | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def citire_date(): | ||
import sys | |||
input = sys.stdin.read | |||
data = input().split() | |||
for _ in range( | N = int(data[0]) | ||
M = int(data[1]) | |||
elevi = [] | |||
index = 2 | |||
for _ in range(M): | |||
i = int(data[index]) | |||
j = int(data[index+1]) | |||
p = int(data[index+2]) | |||
elevi.append((i, j, p)) | |||
index += 3 | |||
return N, M, elevi | |||
def deseneaza_patratele(N, elevi): | |||
tabla = [[0] * N for _ in range(N)] | |||
for i, j, p in elevi: | |||
for x in range(max(0, i - p), min(N, i + p + 1)): | |||
for y in range(max(0, j - p), min(N, j + p + 1)): | |||
if abs(x - i) + abs(y - j) <= p: | |||
tabla[x][y] = 1 | |||
numar_patratele_nedesenate = sum(row.count(0) for row in tabla) | |||
return numar_patratele_nedesenate | |||
def | def main(): | ||
N, M, elevi = citire_date() | |||
# Verificarea restrictiilor | |||
assert 1 <= N <= 1000, "N trebuie sa fie intre 1 si 1000" | |||
assert 1 <= M <= 100000, "M trebuie sa fie intre 1 si 100000" | |||
for i, j, p in elevi: | |||
assert 1 <= i <= N, "i trebuie sa fie intre 1 si N" | |||
assert 1 <= j <= N, "j trebuie sa fie intre 1 si N" | |||
assert 0 <= p <= N // 2, "p trebuie sa fie intre 0 si N//2" | |||
rezultat = deseneaza_patratele(N, elevi) | |||
print(rezultat) | |||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 21:27, 2 June 2024
Cerința[edit | edit source]
În clasa a IX-a A sunt M elevi, numerotați de la 1 la M și fiecare are un număr preferat P. Plictisiți de ora de informatică, au inventat următorul joc:
pe o foaie de matematică desenează o tablă de joc de dimensiune N, formată din N linii și N coloane, numerotate de la 1 la N; fiecare linie și fiecare coloană are câte N pătrățele fiecare elev alege un pătrățel și desenează un X centrat în pătrățelul ales, fiecare din cele 4 laturi având cel mult P pătrățele desenate, fără a ieși de pe tabla de joc (să nu mâzgălească banca!!). icsurile desenate de elevi se pot suprapune. Cunoscând dimensiunea N a tablei de joc, numărul M de elevi, coordonatele alese de fiecare elev și numărul preferat al fiecărui elev, determinați câte pătrățele de pe tablă rămân nedesenate.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul N M, iar apoi M triplete i j p, reprezentând coordonatele pătrățelului ales și numărul preferat de fiecare elev.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul de pătrățele nedesenate.
Restricții și precizări[edit | edit source]
- 1 ≤ N ≤ 1000
- 1 ≤ M ≤ 100000
- 1 ≤ i,j ≤ N
- 0 ≤ p ≤ N/2
Exemplu 1[edit | edit source]
- Intrare
10 5
1 2 1
6 6 3
7 3 2
2 5 2
9 8 3
- Iesire
62
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def citire_date():
import sys input = sys.stdin.read data = input().split() N = int(data[0]) M = int(data[1]) elevi = [] index = 2 for _ in range(M): i = int(data[index]) j = int(data[index+1]) p = int(data[index+2]) elevi.append((i, j, p)) index += 3 return N, M, elevi
def deseneaza_patratele(N, elevi):
tabla = [[0] * N for _ in range(N)] for i, j, p in elevi: for x in range(max(0, i - p), min(N, i + p + 1)): for y in range(max(0, j - p), min(N, j + p + 1)): if abs(x - i) + abs(y - j) <= p: tabla[x][y] = 1 numar_patratele_nedesenate = sum(row.count(0) for row in tabla) return numar_patratele_nedesenate
def main():
N, M, elevi = citire_date()
# Verificarea restrictiilor assert 1 <= N <= 1000, "N trebuie sa fie intre 1 si 1000" assert 1 <= M <= 100000, "M trebuie sa fie intre 1 si 100000" for i, j, p in elevi: assert 1 <= i <= N, "i trebuie sa fie intre 1 si N" assert 1 <= j <= N, "j trebuie sa fie intre 1 si N" assert 0 <= p <= N // 2, "p trebuie sa fie intre 0 si N//2"
rezultat = deseneaza_patratele(N, elevi) print(rezultat)
if __name__ == "__main__":
main()
</syntaxhighlight>