3646 - Zoom poza: Difference between revisions
No edit summary |
nume variabile |
||
Line 48: | Line 48: | ||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
import numpy as np | import numpy as np | ||
def main(): | def main(): | ||
fin = open("zoom_poza.in", "r") | fin = open("zoom_poza.in", "r") | ||
fout = open("zoom_poza.out", "w") | fout = open("zoom_poza.out", "w") | ||
numar_c = int(fin.readline()) | |||
if numar_c == 1: | |||
caz_1(fin, fout) | |||
elif numar_c == 2: | |||
caz_2(fin, fout) | |||
def caz_1(fin, fout): | |||
numar_n, numar_m = map(int, fin.readline().split()) # citim numerele n, m | |||
numar_z = int(fin.readline()) # citim numar z | |||
def | numar_a = np.zeros((numar_n, numar_m), dtype=int) | ||
for i in range(numar_n): | |||
for i in range( | |||
line = fin.readline().split() | line = fin.readline().split() | ||
for j in range( | for j in range(numar_m): | ||
numar_a[i][j] = int(line[j]) # citim matricea initiala | |||
numar_b = np.zeros((numar_n * numar_z, numar_m * numar_z), dtype=int) | |||
for i in range( | for i in range(numar_n): | ||
constanta = 0 | constanta = 0 | ||
for j in range( | for j in range(numar_m): | ||
for | for numar_x in range(numar_z): | ||
for | for numar_y in range(numar_z): | ||
numar_b[i * numar_z + numar_y][ | |||
constanta * numar_z + numar_x | |||
] = numar_a[i][j] | |||
# se creeaza matricea marita de z ori | |||
constanta += 1 | constanta += 1 | ||
for i in range(0, | for i in range(0, numar_z * numar_n): | ||
for j in range(0, | for j in range(0, numar_z * numar_m): | ||
fout.write(str( | fout.write(str(numar_b[i][j]) + " ") # scriem in fisier matricea rezultata | ||
fout.write("\n") | fout.write("\n") | ||
def | |||
def caz_2(fin, fout): | |||
numar_n, numar_m = map(int, fin.readline().split()) # citim numerele n, m | |||
for i in range( | numar_z = int(fin.readline()) # citim z | ||
numar_a = np.zeros((numar_n, numar_m), dtype=int) | |||
for i in range(numar_n): | |||
line = fin.readline().split() | line = fin.readline().split() | ||
for j in range( | for j in range(numar_m): | ||
numar_a[i][j] = int(line[j]) # citim matricea initiala | |||
numar_k = int(fin.readline()) # citim numarul k | |||
for i in range( | for i in range(numar_k): | ||
linia1, coloana1 = map(int, fin.readline().split()) # citim linia 1, coloana 1 | |||
line = | line = linia1 / numar_z | ||
if | if linia1 % numar_z != 0: | ||
line += 1 | line += 1 | ||
column = | column = coloana1 / numar_z | ||
if | if coloana1 % numar_z != 0: | ||
column += 1 | column += 1 | ||
fout.write(str( | fout.write( | ||
str(numar_a[int(line - 1)][int(column - 1)]) + " " | |||
) # scriem in fisier valoarea de | |||
# pe pozitia ceruta | |||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 22:01, 12 January 2024
Cerința[edit | edit source]
În orașul Detroit s-a produs o spargere la un magazin de bijuterii. Infractorii au fugit de la locul faptei, iar polițiștii au reusit să facă rost doar de o poză neclară cu infractorii.
Cu ajutorul inteligenței artificiale reușesc să mărească acea imagine pentru a găsi niște detalii pentru a-i ajuta la rezolvarea cazului. Fii de partea binelui și ajută-i pe polițiști să rezolve acest caz!
Poza este reprezentată printr-o matrice cu n
linii și m
coloane, alcătuită din numere naturale. Polițiștii te roagă să-i ajuți, răspunzând la următoarele întrebări:
1) Dându-se o matrice reprezentând poza și un coeficient de mărire z
, construiește o altă matrice care să reprezinte poza mărită de z
ori.
2) Dându-se o matrice reprezentând poza, coeficientul de mărire z
și un șir perechi de coordonate din poza mărită, determină pentru fiecare pereche de coordonate valoarea din poza mărită.
Date de intrare[edit | edit source]
Fișierul de intrare zoom_poza.in
conține pe prima linie numărul c
, reprezentând întrebarea la care trebuie să răspunzi.
Pentru c=1
pe a doua linie se află numărul de linii n
și numărul de coloane m
, pe a treia linie factorul de al imaginii z
, iar pe următoarele n
linii și m
coloane poza sub forma unei matrici.
Pentru c=2
pe a doua linie se află numărul de linii n
și numărul de coloane m
, pe a treia linie factorul de al imaginii z
, iar pe următoarele n
linii și m
coloane poza sub forma unei matrici. Pe a patra linie se află k
– numărul de perchi de coordonate, iar pe următoarele k
linii câte două numere l1 c1
, reprezentând numărul de ordine al liniei, respectiv al coloanei pentru elementul cerut din matricea finală.
Date de ieșire[edit | edit source]
Fișierul de ieșire zoom_poza.out
va conține:
- pentru
c=1
imaginea mărită de către program, în dimensiune den*z
linii șim*z
coloane. - pentru
c=2
se vor afișa numerele aflate pe pozițiile date în poza mărită, separate printr-un spațiu.
Restricții și precizări[edit | edit source]
- Pentru
c=1
:1 ≤ n ≤ m ≤ 70
1 ≤ a[i][j] ≤ 100.000
1 ≤ z ≤ 10
- Pentru teste în valoare de 40 de puncte,
c=1
.
- Pentru
c=2
:- Pentru 20 de puncte:
1 ≤ n ≤ m ≤ 70
1 ≤ a[i][j] ≤ 100.000
1 ≤ z ≤ 10
1 ≤ k ≤ 1000
1 ≤ l1 ≤ c1 ≤ 2500
- Pentru 60 de puncte:
1 ≤ n ≤ m ≤ 50
1 ≤ a[i][j] ≤ 9•1018
1 ≤ z ≤ 9•1014
1 ≤ k ≤ 1.000
1 ≤ l1 ≤ c1 ≤ 9•1018
- Pentru 20 de puncte:
- Se recomandă evitarea rezolvării din afișare!
<syntaxhighlight lang="python3"> import numpy as np
def main():
fin = open("zoom_poza.in", "r") fout = open("zoom_poza.out", "w")
numar_c = int(fin.readline())
if numar_c == 1: caz_1(fin, fout) elif numar_c == 2: caz_2(fin, fout)
def caz_1(fin, fout):
numar_n, numar_m = map(int, fin.readline().split()) # citim numerele n, m numar_z = int(fin.readline()) # citim numar z numar_a = np.zeros((numar_n, numar_m), dtype=int) for i in range(numar_n): line = fin.readline().split() for j in range(numar_m): numar_a[i][j] = int(line[j]) # citim matricea initiala numar_b = np.zeros((numar_n * numar_z, numar_m * numar_z), dtype=int) for i in range(numar_n): constanta = 0 for j in range(numar_m): for numar_x in range(numar_z): for numar_y in range(numar_z): numar_b[i * numar_z + numar_y][ constanta * numar_z + numar_x ] = numar_a[i][j] # se creeaza matricea marita de z ori constanta += 1 for i in range(0, numar_z * numar_n): for j in range(0, numar_z * numar_m): fout.write(str(numar_b[i][j]) + " ") # scriem in fisier matricea rezultata fout.write("\n")
def caz_2(fin, fout):
numar_n, numar_m = map(int, fin.readline().split()) # citim numerele n, m numar_z = int(fin.readline()) # citim z numar_a = np.zeros((numar_n, numar_m), dtype=int) for i in range(numar_n): line = fin.readline().split() for j in range(numar_m): numar_a[i][j] = int(line[j]) # citim matricea initiala numar_k = int(fin.readline()) # citim numarul k for i in range(numar_k): linia1, coloana1 = map(int, fin.readline().split()) # citim linia 1, coloana 1 line = linia1 / numar_z if linia1 % numar_z != 0: line += 1 column = coloana1 / numar_z if coloana1 % numar_z != 0: column += 1 fout.write( str(numar_a[int(line - 1)][int(column - 1)]) + " " ) # scriem in fisier valoarea de # pe pozitia ceruta
if __name__ == "__main__":
main()
</syntaxhighlight>