Pagini recente » Cod sursa (job #2528922) | Cod sursa (job #2738699) | Cod sursa (job #1671913) | Cod sursa (job #2211508) | Cod sursa (job #3266203)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("matrix.in");
ofstream cout("matrix.out");
short n, m, cnt, x, i, j, k, nr;
int fv[27];
char v;
struct matrice {
int 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++)
{
int 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;
}