Cod sursa(job #581227)

Utilizator Rares95Rares Arnautu Rares95 Data 13 aprilie 2011 22:03:27
Problema Matrix Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
	
  //# include <cstdio>
  # include <fstream>
  # include <cstring>
	using namespace std;
	
	int n, m, sol;
	int f[26], g[26], a[1001][1001];
	char x[1001];
	
	void read () {
		char cit;
		//std :: freopen ( "matrix.in", "rt", stdin );
		//scanf ( " %d %d ", &n, &m );
		std :: ifstream fin ( "matrix.in" );
		fin >> n >> m;
		for ( int i = 1; i <= n; ++i ) {
			fin >> x;
			for ( int j = 1; j <= n; ++j ) 
				a[i][j] = x[j-1];
		}
		for ( int i = 1; i <= m; ++i )
			for ( int j = 1; j <= m; ++j ) {
				//scanf ( " %c", &cit );
				fin >> cit;
				++f[cit - 'a'];
			}
	}
	
	void write () {
		//std :: freopen ( "matrix.out", "wt", stdout );
		//printf ( "%d\n", sol );
		std :: ofstream fout ( "matrix.out" );
		fout << sol << '\n';
	}
	
	int main () {
		read ();
		for ( int vf = n - m + 1, i = 1; i <= vf; ++i ) {
			for ( int j = 1; j <= vf; ++j ) {
				if ( !f[ a[i][j] - 'a' ] ) continue;
				memset ( g, 0, sizeof g );
				for ( int vf1 = i + m, vf2 = j + m, k = i; k < vf1; ++k ) {
					for ( int l = j; l < vf2; ++l ) {
						++g[ a[k][l] - 'a' ];
					}
				}
				int ok = 1;
				for ( int k = 0; k < 26; ++k )
					if ( f[k] != g[k] ) {
						ok = 0;
						break;
					}
				if ( ok ) ++sol;
			}
		}
		write ();
		return 0;
	}