Cod sursa(job #575703)

Utilizator Catah15Catalin Haidau Catah15 Data 8 aprilie 2011 17:43:32
Problema Matrix Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

#define maxN 1005


char a[maxN][maxN];
int vir[30], v[30], sol, N, M;


int main()
{
	ifstream f("matrix.in");
	ofstream g("matrix.out");
	
	f >> N >> M;
	
	for (int i = 1; i <= N; ++ i)
		for (int j = 1; j <= N; ++ j)
			f >> a[i][j];
	
	
	for (int i = 1; i <= M; ++ i)
		for (int j = 1; j <= M; ++ j)
		{
			char c;
			
			f >> c;
			
			++ vir[c - 'a'];
		}
	
	


	for (int i = 1; i <= N; ++ i)
	{	
		memset (v, 0, sizeof (v));
		
		for (int x = i; x < i + M; ++ x)
			for (int y = 1; y <= M; ++ y)
				++ v[a[x][y] - 'a'];
		
		bool ok = true;
		
		for (int x = 0; x < 26; ++ x)
			if (v[x] != vir[x])
			{
				ok = false;
				break;
			}
			
		if (ok) ++ sol;	
		
		
		for (int j = 2; j <= N; ++ j)
		{			
			for (int t = i; t < i + M; ++ t)
				-- v[a[t][j - 1] - 'a'];
		
			for (int t = i; t < i + M; ++ t)
				++ v[a[t][j + M - 1] - 'a'];
			
			bool ok = true;
			
			for (int x = 0; x < 26; ++ x)
				if (v[x] != vir[x])
				{
					ok = false;
					break;
				}
				
			if (ok) ++ sol;
		}
	}
	
	
	g << sol;
	
	
	f.close();
	g.close();
	
	return 0;
}