Cod sursa(job #409227)

Utilizator freak93Adrian Budau freak93 Data 3 martie 2010 15:20:14
Problema Matrix Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
#include<cstdio>

using namespace std;

const char iname[]="matrix.in";
const char oname[]="matrix.out";
const int maxm=1005;
const int maxn=205;

ifstream f(iname);
ofstream g(oname);

char s[maxm][maxn],v[maxn][maxn];

int a[maxm][maxm],t[maxm][maxm],i,j,n,m,p,many[300],k;

int main()
{
    f>>m>>n;
    f.get();
    for(i=1;i<=m;++i)
        f.getline(s[i]+1,sizeof(s[i]));
    for(i=1;i<=n;++i)
    {
        f.getline(v[i]+1,sizeof(v[i]));
        for(j=1;j<=n;++j)
            ++many[v[i][j]];
    }
    for(i=1;i<=m;++i)
        for(j=1;j<=m;++j)
            t[i][j]=1;
    for(p='a';p<'z';++p)
    {
        for(i=1;i<=m;++i)
            for(j=1;j<=m;++j)
            {
                a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+(s[i][j]==p);
                if(t[i][j]&&i>=n&&j>=n)
                    t[i][j]=((a[i][j]-a[i-n][j]-a[i][j-n]+a[i-n][j-n])==many[p]);
            }
    }

    for(i=n;i<=m;++i)
        for(j=n;j<=m;++j)
            k+=t[i][j];

    g<<k<<"\n";

    f.close();
    g.close();

    return 0;
}