Cod sursă (job #465912)

Utilizator avatar ezioconnor Vlad - Gabriel Iftimescu ezioconnor IP ascuns
Problemă Fotografie (clasele 9-10) Compilator cpp | 1,38 kb
Rundă Arhiva de probleme Status evaluat
Dată 3 apr. 2019 19:42:21 Scor 0
#include <fstream>

using namespace std;

ifstream in("fotografie.in");
ofstream out("fotografie.out");

const int baza = 31, mod = 1e9 + 7;
long long a[1001][1001], b[1001];

int main()
{
    int n, m, p, q;
    char c;
    in >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
        long long x = 1;
        for (int j = 1; j <= m; ++j)
        {
            in >> c;
            a[i][j] = (a[i][j - 1] + ((c - 'a' + 1) * x) % mod) % mod;
            x = (x * baza) % mod;
        }
    }
    in >> p >> q;
    for (int i = 1; i <= p; ++i)
    {
        long long s = 0, x = 1;
        char prev;
        for (int j = 1; j <= q; ++j)
        {
            in >> c;
            s = (s + ((c - 'a' + 1) * x) % mod) % mod;
            x = (x * baza) % mod;
            prev = c;
        }
        b[i] = s;
    }
    for (int i = 1; i <= n - p + 1; ++i)
    {
        long long x = 1;
        for (int j = 1; j <= m - q + 1; ++j)
        {
            bool ok = 1;
            for (int k = i; k <= i + p - 1 && ok; ++k)
            {
                long long s1 = (a[k][j + q - 1] - a[k][j - 1]) / x;
                long long s2 = b[k - i + 1];
                if (s1 != s2)
                    ok = 0;
            }
            x = (x * baza) % mod;
            if (ok)
                out << i - 1 << " " << j - 1 << '\n';
        }
    }
    return 0;
}