Pagini recente » Cod sursa (job #2617096) | Arhiva de probleme | Autentificare | Istoria paginii runda/tema_grf1 | Cod sursa (job #2956656)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("matrix.in");
ofstream g("matrix.out");
const int nmax = 1007;
int v[nmax][nmax], sp[nmax][nmax];
long long spat[nmax][nmax];
long long n, m, s, spa, curs, curspat, sol, x;
char c;
int main()
{
f >> n >> m;
for ( int i = 1; i <= n; i++ ) {
f.get();
for ( int j = 1; j <= n; j++ ) {
f.get(c);
v[i][j] = c - 'a' + 1;
sp[i][j] = sp[i - 1][j] + sp[i][j - 1] - sp[i - 1][j - 1] + v[i][j];
spat[i][j] = spat[i - 1][j] + spat[i][j - 1] - spat[i - 1][j - 1] + v[i][j] * v[i][j];
}
}
for ( int i = 1; i <= m; i++ ) {
f.get();
for ( int j = 1; j <= m; j++ ) {
f.get(c);
x = c - 'a' + 1;
s += x;
spa += x * x;
}
}
for ( int i = m; i <= n; i++ )
for ( int j = m; j <= n; j++ ) {
curs = sp[i][j] - sp[i - m][j] - sp[i][j - m] + sp[i - m][j - m];
curspat = spat[i][j] - spat[i - m][j] - spat[i][j - m] + spat[i - m][j - m];
if ( curs == s && curspat == spa )
sol++;
}
g << sol << '\n';
f.close();
g.close();
return 0;
}