Pagini recente » Cod sursa (job #2360298) | Cod sursa (job #291582) | Cod sursa (job #2249701) | Cod sursa (job #2173689) | Cod sursa (job #3266201)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("matrix.in");
ofstream cout("matrix.out");
short n, m, cnt, x, fv[27], i, j, k, nr;
char v;
struct matrice {
short s[1001][1001];
} t[27];
int main() {
cin>>n>>m;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
{
cin>>v;
x= v- 'a' +1;
t[x].s[i][j]=1;
}
for (i=1; i<=m; i++)
for (j=0; j<m; j++)
{
cin>>v;
fv[v-'a'+1]++;
}
nr= 0;
for (k='a'-'a'+1; k<='z' - 'a'+1 and nr<m*m; k++)
{
if (fv[k])
nr++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
t[k].s[i][j]+= (t[k].s[i-1][j]+t[k].s[i][j-1]-t[k].s[i-1][j-1]);
}
for (i=1; i<n-m+2; i++)
for (j=1; j<n-m+2; j++)
{
nr=0;
short i2= i+m-1, j2= j+m-1;
bool ok=1;
for (k='a'-'a' +1; k<='z'-'a' +1 and nr<m*m; k++)
{
short sum= t[k].s[i2][j2] - t[k].s[i-1][j2] - t[k].s[i2][j-1] + t[k].s[i-1][j-1];
if (sum!= fv[k])
ok=0;
if (fv[k])
nr++;
}
if (ok)
cnt++;
}
cout<<cnt;
return 0;
}