Pagini recente » Monitorul de evaluare | Cod sursa (job #744249) | Cod sursa (job #1604415) | Cod sursa (job #1235893) | Cod sursa (job #1143049)
#include <fstream>
using namespace std;
ifstream f("matrix.in");
ofstream g("matrix.out");
int N,M;
int Aparition[30];
int Matrix[1005][1005][30];
char Code[1005][1005];
int Result;
void Read()
{
int i,j;
char ch;
f>>M>>N;
for(i=1;i<=M;i++)
for(j=1;j<=M;j++)
f>>Code[i][j];
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
f>>ch;
Aparition[ch-'a']++;
}
}
void Browse()
{
int i,j;
/*for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
Matrix[N][N][Code[i][j]-'a']++;*/
for(i=1;i<=M;i++)
for(j=1;j<=M;j++)
{
for(int k=0;k<26;k++)
Matrix[i][j][k]=Matrix[i][j-1][k]+Matrix[i-1][j][k]-Matrix[i-1][j-1][k]+(Code[i][j]==k+'a');
}
for(i=N;i<=M;i++)
for(j=N;j<=M;j++)
{
bool ok=0;
int i2=i-N+1,j2=j-N+1;
for(int k=0;k<26;k++)
if(Matrix[i][j][k]-Matrix[i2-1][j][k]-Matrix[i][j2-1][k]+Matrix[i2-1][j2-1][k]!=Aparition[k])
{
ok=1;
break;
}
if(ok==0)
Result++;
}
}
int main()
{
Read();
Browse();
g<<Result<<"\n";
return 0;
}