Rezolvare completă PbInfo #1266 CautaNrInMatrice

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.

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 Adresa de email.

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!