Pagini recente » Cod sursa (job #1052409) | Cod sursa (job #1600707) | Cod sursa (job #276016) | Cod sursa (job #1157256) | Cod sursa (job #2471095)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("matrix.in");
ofstream g("matrix.out");
char a[1005][1005];
char c;
int frvir[30],n,m;
short s[1005][29];
int sum[30];
int main()
{
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++)
{
f>>c;
frvir[c-'a']++;
}
}
int submat=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
for(int d=0;d<26;d++)
{
if(a[i][j]-'a'==d) s[j][d]++;
}
}
}
for(int i=m;i<=n;i++)
{bool ok=0;
if(i!=m)
{
for(int j=1;j<=m;j++)
{
for(int d=0;d<26;d++)
{
if(a[i][j]-'a'==d) s[j][d]++;
if(a[i-m][j]-'a'==d) s[j][d]--;
}
}
}
for(int d=0;d<=26;d++) sum[d]=0;
for(int j=1;j<=m;j++)
{
for(int d=0;d<26;d++)
{
sum[d]+=s[j][d];
}
}
for(int d=0;d<26;d++)
{
if(sum[d]!=frvir[d]) ok=1;
}
if(ok==0) submat++;
for(int j=m+1;j<=n;j++)
{
ok=0;
for(int d=0;d<=26;d++)
{
sum[d]=sum[d]+s[j][d];
sum[d]=sum[d]-s[j-m][d];
if(sum[d]!=frvir[d]) ok=1;
}
if(ok==0) submat++;
}
}
g<<submat;
}