# PBinfo #1266 – cautanrinmatrice – Rezolvare C++

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

## Enunț

Cerința
Se dă o matrice cu n linii şi m coloane ce conţine numere naturale astfel încât parcurgând matricea pe prima linie de la stânga la dreapta, pe a doua linie de la dreapta la stânga, pe a treia linie de la stânga la drepta, ş.a.m.d.,  toate elementele matricei vor forma un şir strict crescător. Fiind date p numere naturale ordonate strict crescător, să se afişeze pentru fiecare numărul liniei şi coloanei unde acesta se găseşte în matrice, respectiv 0 dacă acesta nu se găseşte în matrice.

Date de intrare
Fișierul de intrare cautanrinmatrice.in conține pe prima linie numerele n şi m reprezentând dimensiunile matricei , pe următoarele n linii câte m numere aranjate conform enunţului reprezentând elementele matricei, pe următoarea linie numărul p, iar pe ultima linie cele p numere în ordine strict crescătoare ce trebuie căutate în matrice.

Date de ieșire
Fișierul de ieșire cautanrinmatrice.out va conține pe primele p linii numărul liniei şi coloanei pe care se află în matrice fiecare din cele p numere date, respectiv 0 dacă numărul nu se găseşte în matrice.

Restricții și precizări

1 ≤ n , m ≤ 1000
elementele matricei sunt numere naturale mai mici decât 2.000.000.000
1 ≤ p ≤ 1.000.000
cele p numere vor fi mai mici decât 2.000.000.000

Exemplu:
cautanrinmatrice.in

3 4
2 5 11 14
29 27 23 19
32 38 44 59
3
11 24 38
cautanrinmatrice.out

1 3
0
3 2
Explicație
Numărul 11 se află în matrice pe linia 1 coloana 3, numărul 24 nu se află în matrice, iar numărul 38 se află în matrice pe linia 3, coloana 2.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream in("cautanrinmatrice.in");
ofstream out("cautanrinmatrice.out");
int v[1000008], n, m, C, temp, li, co, prod, poz, mij;
int caut(int st, int dr) {
    if (st > dr) return 0 ;
    else {
    	mij = (st + dr) / 2 ;
    	if (v[mij] == temp) return mij ;
    	else if (v[mij] < temp) return caut (mij + 1, dr) ;
    	else return caut(st, mij - 1);
	 }
}
int main() {
    in >> n >> m ;
    prod = n * m ;
    for (int i = 1; i <= n; ++i)
       if (i % 2 == 1)
    	   for (int j = 1; j <= m; ++j)
    		   in >> v[(i - 1) * m + j] ;
		   else for (int j = 1; j <= m; ++j)
			   in >> v[i * m - j + 1];
    in >> C;
    for (int c = 1; c <= C; ++c) {
		in >> temp;
		poz = caut(1, prod) ;
		if (poz == 0)
			out << 0 << "\n" ;
		else {
			if (poz % m == 0) {
				li = poz / m; co = m;
			} else {
				li = poz / m + 1;
				co = poz % m;
			} if (li % 2 == 1)
				out << li << " " << co << "\n" ;
			else out << li << " " << m - co + 1 << "\n" ;
	    }
    } return 0 ;
}
```

## Resurse

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