Mai intai trebuie sa te autentifici.
Cod sursa(job #2956656)
Utilizator | Data | 20 decembrie 2022 08:45:53 | |
---|---|---|---|
Problema | Matrix | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.25 kb |
#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;
}