Pagini recente » Cod sursa (job #1960499) | Cod sursa (job #1988387) | Cod sursa (job #3194156) | Cod sursa (job #307283) | Cod sursa (job #1376243)
#include<fstream>
#include<string>
using namespace std;
ifstream fin( "matrix.in" );
ofstream fout( "matrix.out" );
const int nmax = 1000;
const int nrlit = 26;
int f[ nrlit + 1 ];
int s[ nmax + 1 ][ nmax + 1 ][ nrlit + 1 ];
inline int cate( int i, int j, int k, int lat ) {
return s[ i ][ j ][ k ] - s[ i - lat ][ j ][ k ] - s[ i ][ j - lat ][ k ] + s[ i - lat ][ j - lat ][ k ];
}
int main() {
int n, m;
string x;
fin >> n >> m;
for( int i = 1; i <= n; ++ i ) {
fin >> x; x = "#" + x;
for( int j = 1; j <= n; ++ j ) {
for( int k = 0; k < nrlit; ++ k ) {
s[ i ][ j ][ k ] = s[i - 1][ j ][ k ] + s[ i ][j - 1][ k ] - s[i - 1][j - 1][ k ] + (x[ j ] - 'a' == k);
}
}
}
for( int i = 1; i <= m; ++ i ) {
fin >> x;
for( int j = 0; j < m; ++ j ) {
++ f[ x[ j ] - 'a' ];
}
}
int ans = 0;
for( int i = m; i <= n; ++ i ) {
for( int j = m; j <= n; ++ j ) {
bool ok = 1;
for( int k = 0; k < nrlit; ++ k ) {
if ( f[ k ] != cate( i, j, k, m ) ) {
ok = 0; break;
}
}
ans += ok;
}
}
fout << ans << "\n";
fin.close();
fout.close();
return 0;
}