Pagini recente » Cod sursa (job #1988862) | Borderou de evaluare (job #2378628) | Borderou de evaluare (job #194611) | Cod sursa (job #1967152) | Cod sursa (job #3132705)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
int n,m;
char a[1000][1000],b[1000][1000];
int v[1000],f[1000];
/*int verif(int i,int j)
{
int nr=0;
int ok1=1,ok2=1,ok3=1,ok4=1;
if(a[i][j+1]==b[1][2])
{
if(a[i+1][j]==b[2][1])
{
int k=1;
int l=1;
for(int ii=i;ii<=i+m-1 && ok1;ii++)
{
l=1;
for(int jj=j;jj<=j+m-n && ok1;jj++)
{
if(a[ii][jj]!=b[k][l])
ok1=0;
l++;
}
k++;
}
}
else ok1=0;
nr+=ok1;
ok1=1;
if(a[i-1][j]==b[2][1])
{
int k=1;
int l=1;
for(int jj=j;jj<=j+m-n && ok1;jj++)
{
l=1;
for(int ii=i;ii<=i-m+1 && ok1;ii--)
{
if(a[ii][jj]!=b[k][l])
ok1=0;
l++;
}
k++;
}
}
else ok1=0;
nr+=ok1;
}
if(a[i+1][j]==b[1][2])
{
if(a[i][j+1]==b[2][1])
{
int k=1;
int l=1;
for(int jj=j;jj<=j+m-1 && ok2;jj++)
{
l=1;
for(int ii=i;ii<=i+m-1 && ok2;ii++)
{
if(a[ii][jj]!=b[k][l])
ok2=0;
l++;
}
k++;
}
}
else ok2=0;
nr+=ok2;
ok2=1;
if(a[i][j-1]==b[2][1])
{
int k=1;
int l=1;
for(int jj=j;jj<=j-m+1 && ok2;jj++)
{
l=1;
for(int ii=i;ii<=i+m-1 && ok2;ii++)
{
if(a[ii][jj]!=b[k][l])
ok2=0;
l++;
}
k++;
}
}
else ok2=0;
nr+=ok2;
}
if(a[i-1][j]==b[1][2])
{
if(a[i][j+1]==b[2][1])
{
int k=1;
int l=1;
for(int ii=i;ii<=i-m+1 && ok3;ii++)
{
l=1;
for(int jj=j;jj<=j+m-n && ok3;jj++)
{
if(a[ii][jj]!=b[k][l])
ok3=0;
l++;
}
k++;
}
}
else ok3=0;
nr+=ok3;
ok3=1;
if(a[i][j-1]==b[2][1])
{
int k=1;
int l=1;
for(int ii=i;ii<=i-m+1 && ok3;ii++)
{
l=1;
for(int jj=j;jj<=j-m+1 && ok3;jj++)
{
if(a[ii][jj]!=b[k][l])
ok3=0;
l++;
}
k++;
}
}
else ok3=0;
nr+=ok3;
}
if(a[i][j-1]==b[1][2])
{
if(a[i-1][j]==b[2][1])
{
int k=1;
int l=1;
for(int jj=j;jj<=j-m+1 && ok4;jj++)
{
l=1;
for(int ii=i;ii<=i-m+1 && ok4;ii++)
{
if(a[ii][jj]!=b[k][l])
ok4=0;
l++;
}
k++;
}
}
else ok4=0;
nr+=ok4;
ok4=1;
if(a[i+1][j]==b[2][1])
{
int k=1;
int l=1;
for(int ii=i;ii<=i+m-1 && ok4;ii++)
{
l=1;
for(int jj=j;jj<=j-m+1 && ok4;jj++)
{
if(a[ii][jj]!=b[k][l])
ok4=0;
l++;
}
k++;
}
}
else ok4=0;
nr+=ok4;
}
int ok5=1;
if(a[i][j+1]==b[2][2])
{
for(int ii=1;ii<=m && ok5;ii++)
{
if(a[i][j+ii-1]!=a[ii][ii])
ok5=0;
}
}
else ok5=0;
nr+=ok5;
if(a[i][j-1]==b[2][2])
{
for(int ii=1;ii<=m && ok5;ii++)
{
if(a[i][j-ii+1]!=a[ii][ii])
ok5=0;
}
}
else ok5=0;
nr+=ok5;
return nr;
} */
void matint()
{
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
{
int c=b[i][j]-'0';
f[c]++;
}
}
void clear()
{
for(int i=65;i<=122;i++)
v[i]=0;
}
int verif(int i,int j)
{
for(int ii=i;ii<=i+m-1;ii++)
{
for(int jj=j;jj<=j+m-1;jj++)
{
int c=a[ii][jj]-'0';
v[c]++;
}
}
for(int i=65;i<=122;i++)
if(v[i]!=f[i]) return 0;
return 1;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
fin>>a[i][j];
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
fin>>b[i][j];
}
matint();
int nr=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i<=m && j<=m && verif(i,j))
{
nr++;
clear();
}
}
}
fout<<nr;
return 0;
}