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ât2.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
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema CautaNrInMatrice:
#include <fstream>
using namespace std;
ifstream f("cautanrinmatrice.in");
ofstream g("cautanrinmatrice.out");
int i , j , x , a[1000008] , m , n , p , li , co , d , poz , mij ;
int caut( int st , int dr )
{
if ( st > dr ) return 0 ;
else {
mij = ( st + dr ) / 2 ;
if ( a [ mij ] == x ) return mij ;
else if ( a [ mij ] < x ) return caut ( mij + 1 , dr ) ;
else return caut ( st , mij - 1 ) ;
}
}
int main()
{
f >> n >> m ;
d = n * m ;
for ( i = 1 ; i <= n ; i++ )
if ( i % 2 == 1 ) for ( j = 1 ; j <= m ; j++ ) f >> a [ ( i - 1 ) * m + j ] ;
else for ( j = 1 ; j <= m ; j++ ) f >> a [ i * m - j + 1 ] ;
f >> p ;
for ( i = 1 ; i <= p ; i++ )
{
f >> x;
poz = caut(1,d) ;
if ( poz==0 ) g << 0 << "\n" ;
else
{
if( poz%m==0 ){ li = poz / m ; co = m ; }
else { li = poz /m + 1 ; co = poz % m ; }
if( li%2==1 ) g << li << " " << co << "\n" ;
else g << li << " " << m - co + 1 << "\n" ;
}
}
return 0 ;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1266 CautaNrInMatrice
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1266 CautaNrInMatrice de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!