Cod sursa(job #1827753)

Utilizator plecinspaniaCapsunar plecinspania Data 12 decembrie 2016 11:42:44
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
#define Nmax 1003
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
int n,m,sum1[Nmax][Nmax],sum1p[Nmax][Nmax],sum2[Nmax][Nmax],sum2p[Nmax][Nmax];
char a[Nmax][Nmax],b[Nmax][Nmax];
void Citire()
{
    int i;
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>(a[i]+1);
    for(i=1;i<=m;i++)
        fin>>(b[i]+1);
    fin.close();
}

void Rezolvare()
{
    int i,j,sol,x;
    long long s,sp,val,val1;
    s=sp=sol=0;
    for(i=1;i<=m;i++)
        for(j=1;j<=m;j++)
    {
        x=b[i][j]-'a'+1;
        s+=x;
        x=x*x;
        sp+=x;
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
    {
        sum1[i][j]=sum1[i-1][j]+sum1[i][j-1]-sum1[i-1][j-1]+(a[i][j]-'a'+1);
        sum1p[i][j]=sum1p[i-1][j]+sum1p[i][j-1]-sum1p[i-1][j-1]+(a[i][j]-'a'+1)*(a[i][j]-'a'+1);
    }
    int cnt=0;
    for(i=m;i<=n;i++)
        for(j=m;j<=n;j++)
    {
        val=sum1[i][j]-sum1[i-m][j]-sum1[i][j-m]+sum1[i-m][j-m];
        val1=sum1p[i][j]-sum1p[i-m][j]-sum1p[i][j-m]+sum1p[i-m][j-m];
        if(val==s && val1 == sp)sol++;
    }
    fout<<sol<<"\n";
    fout.close();
}

int main()
{
    Citire();
    Rezolvare();
    return 0;
}