fbpx

Problema #1527 – zoom – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dă o matrice pătratică de ordin p şi alta cu m linii şi n coloane, ale căror elemente sunt egale cu 0, 1 sau 2. Determinaţi numărul de apariţii ale primei matrice în a doua.

Date de intrare

Fișierul de intrare zoom.in conține pe prima linie numerele p,m,n, pe următoarele p linii câte p numere naturale, iar pe următoarele m linii câte n numere naturale, reprezentând elementele celor două matrice.

Date de ieșire

Fișierul de ieșire zoom.out va conține pe prima linie numărul de apariţii ale primei matrice în a doua.

Restricții și precizări

  • 2 ≤ m , n ≤ 1000
  • 1 ≤ p ≤ 10
  • p ≤ m şi p ≤ n
  • elementele matricelor sunt 0,1 sau 2
  • prima matrice apare în a doua dacă există o submatrice în a doua ale cărei elemente să coincidă cu ale primei matrice

Exemplu

zoom.in

2 4 5
0 1
2 1
1 2 0 1 2
0 1 2 1 2
2 1 2 0 1
1 1 1 2 1

zoom.out

3

Explicație

Prima matrice apare în a doua în trei poziţii astfel încât colţul stânga sus al său să coincidă pe rând cu elementele din a doua matrice situate în poziţiile (1,3),(2,1),(3,4).

#include <bits/stdc++.h>
using namespace std;
ifstream cin("zoom.in");
ofstream cout("zoom.out");
int a[1002][1002] , v[20][20];
int main()
{
    int x , y , z , cnt = 0;
    cin >> x >> y >> z;
    for(int i = 0 ; i < x ; ++i)
        for(int j = 0 ; j < x ; ++j)
            cin >> v[i][j];
    for(int i = 0 ; i < y ; ++i)
        for(int j = 0 ; j < z ; ++j)
            cin >> a[i][j];
    for(int i = 0 ; i <= y-x ; ++i)
        for(int j = 0 ; j <= z-x ; ++j)
        {
            int ok = 0;
            for(int h = i , hi = 0 ; h < i+x ; ++h , ++hi)
                for(int g = j , gj = 0 ; g < j+x ; ++g , ++gj)
                    if(a[h][g] != v[hi][gj])ok = 1;
            if(ok == 0) cnt++;
        }
    cout << cnt;
    return 0;
}
Comentarii

S-ar putea sa iti placa