# PBinfo #3646 – Zoom_Poza – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Î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
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
Fișierul de ieșire zoom_poza.out va conține:


pentru c=1 imaginea mărită de către program, în dimensiune de n*z linii și m*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

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




Se recomandă evitarea rezolvării din afișare!

Exemplul 1:
zoom_poza.in

1
2 3 
3
1 2 3
4 5 6
zoom_poza.out

1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
Exemplul 2:
zoom_poza.in

2 
2 3
3
1 2 3
4 5 6
2
1 2
4 5
zoom_poza.out

1 5

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream fin("zoom_poza.in");
ofstream fout("zoom_poza.out");
int main() 
{
    int c;
    int b[701][701];
    fin >> c;
    cout << c;
    if(c == 1)
    {   
        int a[71][71];
        long long i, j, n, m, k, l1, c1, z, constanta, x, x1;
        fin >> n >> m >> z;
        for (i = 1; i <= n; i++)
            for (j = 1; j <= m; j++)
                fin >> a[i][j];
        for (i = 1; i <= n; i++) 
        {
            constanta = 0;
            for (j = 1; j <= m; j++) 
            {
                for (x = 1; x <= z; x++)
                    for (x1 = 1; x1 <= z; x1++)
                        b[(i - 1) * z + x1][constanta * z + x] = a[i][j];
                constanta++;
            }
        }
        for (i = 1; i <= z * n; i++) 
        {
            for (j = 1; j <= z * m; j++)
                fout << b[i][j] << " ";
            fout << "\n";
        }
    }
    if (c == 2) 
    {   long long i, j, n, m, k, l1, c1, z, constanta, x, x1, linie, coloana;
        fin >> n >> m >> z;
        for (i = 1; i <= n; i++)
            for (j = 1; j <= m; j++)
                fin >> b[i][j];
        fin >> k;
        for (i = 1; i <= k; i++) 
        {
            fin >> l1 >> c1;
            linie = l1 / z;
            if (l1 % z != 0)
                linie++;
            coloana = c1 / z;
            if (c1 % z != 0)
                coloana++;
            fout << b[linie][coloana] << " ";
        }
    }
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3646)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3646/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3646/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
