Pagini recente »
Atașamentele paginii Clasament 2021-03-11-clasa-5-tema-22
|
Istoria paginii runda/2020-05-02-clasa-5-tema-36
|
Statistici ciprian teodorescu (qwaszx)
|
Atașamentele paginii xxxx_5_3
|
Cod sursă (job #465912)
Cod sursă (job
#465912)
#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;
}