めがね / paizaOnlineHackathon7

paiza.jp

#include <iostream>
using namespace std;

int q[100][100], p[10][10];

bool Check(int m, int y, int x)    {
    bool flg = true;

    for (int i=0; i<m; ++i)
        for (int j=0; j<m; ++j) {
            if (i==0 && j==0)   continue;
            if (q[y+i][x+j] != p[i][j]) {
                flg = false;
                break;
            }
        }
    return flg;
}

void Solve(int n)   {
    int m;

    for (int i=0; i<n; ++i)
        for (int j=0; j<n; ++j)
            cin >> q[i][j];
    cin >> m;
    for (int i=0; i<m; ++i)
        for (int j=0; j<m; ++j)
            cin >> p[i][j];
    for (int i=0; i<=n-m; ++i)
        for (int j=0; j<=n-m; ++j)
            if (q[i][j] == p[0][0])
                if ( Check(m,i,j) )    cout << i << " " << j << endl;
}

int main(void)  {
    int n;

    cin >> n;
    Solve(n);
    return 0;
}

パターンの左上が一致していた場合、全て合致しているか一から調べていく。
合致している場合は、その座標を出力。
〜了〜