Pagini recente » Cod sursa (job #1261503) | Cod sursa (job #241191) | Cod sursa (job #1592298) | Cod sursa (job #2530846) | Cod sursa (job #1163746)
#include <fstream>
#include <cstring>
using namespace std;
class elem
{
public:
int frecv[26];
elem()
{
int i;
for(i=0;i<26;i++)
frecv[i]=0;
}
void operator=(const elem a)
{
int i;
for(i=0;i<26;i++)
frecv[i]=a.frecv[i];
}
bool operator==(const elem a)
{
int i;
bool ok=true;
for(i=0;i<26;i++)
if(frecv[i]!=a.frecv[i])
{
ok=false;
break;
}
return ok;
}
void add(char x)
{
frecv[x-'a']++;
}
void subtract(char x)
{
frecv[x-'a']--;
}
void afis()
{
int i;
cout<<endl;
for(i=0;i<26;i++)
cout<<frecv[i]<<' ';
cout<<endl;
}
};
char mat[1005][1005];
char nou[1005][1005];
elem v[1005];
elem model;
int main()
{
ifstream cin("matrix.in");
ofstream cout("matrix.out");
int n,m,i,j;
cin>>n>>m;
for(i=0;i<n;i++)
{
cin.get();
cin.get(mat[i],1005);
}
for(i=0;i<m;i++)
{
cin.get();
cin.get(nou[i],1005);
for(j=0;j<m;j++)
model.add(nou[i][j]);
}
for(i=0;i<m;i++)
for(j=0;j<m;j++)
v[0].add(mat[i][j]);
int cate=0,k;
cate+=(v[0]==model);
elem curent;
curent=v[0];
for(j=1;j+m-1<n;j++)
{
for(k=0;k<=(m-1);k++)
{
curent.subtract(mat[k][j-1]);
curent.add(mat[k][j+m-1]);
}
cate+=(curent==model);
}
for(i=1;i+m-1<n;i++)
{
v[i]=v[i-1];
for(j=0;j<m;j++)
{
v[i].subtract(mat[i-1][j]);
v[i].add(mat[i+m-1][j]);
}
cate+=(v[i]==model);
elem curent;
curent=v[i];
for(j=1;j+m-1<n;j++)
{
for(k=i;k<=(i+m-1);k++)
{
curent.subtract(mat[k][j-1]);
curent.add(mat[k][j+m-1]);
}
cate+=(curent==model);
}
}
cout<<cate<<'\n';
cin.close();
cout.close();
return 0;
}