Cod sursa(job #3132705)

Utilizator Ale_DemianDemian Alexandra Ale_Demian Data 23 mai 2023 17:55:04
Problema Matrix Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 5.44 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
int n,m;
char a[1000][1000],b[1000][1000];
int v[1000],f[1000];

/*int verif(int i,int j)
{
    int nr=0;
    int ok1=1,ok2=1,ok3=1,ok4=1;
    if(a[i][j+1]==b[1][2])
    {
        if(a[i+1][j]==b[2][1])
        {
            int k=1;
            int l=1;
            for(int ii=i;ii<=i+m-1 && ok1;ii++)
            {
                l=1;
                for(int jj=j;jj<=j+m-n && ok1;jj++)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok1=0;
                    l++;
                }
                k++;
            }
        }
        else ok1=0;
        nr+=ok1;
        ok1=1;
        if(a[i-1][j]==b[2][1])
        {
            int k=1;
            int l=1;
            for(int jj=j;jj<=j+m-n && ok1;jj++)
            {
                l=1;
                for(int ii=i;ii<=i-m+1 && ok1;ii--)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok1=0;
                    l++;
                }
            k++;
            }
        }
        else ok1=0;
        nr+=ok1;
    }
    if(a[i+1][j]==b[1][2])
    {
        if(a[i][j+1]==b[2][1])
        {
            int k=1;
            int l=1;
            for(int jj=j;jj<=j+m-1 && ok2;jj++)
            {
                l=1;
                for(int ii=i;ii<=i+m-1 && ok2;ii++)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok2=0;
                    l++;
                }
                k++;
            }
        }
        else ok2=0;
        nr+=ok2;
        ok2=1;
        if(a[i][j-1]==b[2][1])
        {
           int  k=1;
           int l=1;
            for(int jj=j;jj<=j-m+1 && ok2;jj++)
            {
                l=1;
                for(int ii=i;ii<=i+m-1 && ok2;ii++)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok2=0;
                    l++;
                }
                k++;
            }
        }
        else ok2=0;
        nr+=ok2;
    }
    if(a[i-1][j]==b[1][2])
    {
        if(a[i][j+1]==b[2][1])
        {
            int k=1;
            int l=1;
            for(int ii=i;ii<=i-m+1 && ok3;ii++)
            {
                l=1;
                for(int jj=j;jj<=j+m-n && ok3;jj++)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok3=0;
                    l++;
                }
                k++;
            }
        }
        else ok3=0;
        nr+=ok3;
        ok3=1;
        if(a[i][j-1]==b[2][1])
        {
            int k=1;
            int l=1;
            for(int ii=i;ii<=i-m+1 && ok3;ii++)
            {
                l=1;
                for(int jj=j;jj<=j-m+1 && ok3;jj++)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok3=0;
                    l++;
                }
                k++;
            }
        }
        else ok3=0;
        nr+=ok3;
    }
    if(a[i][j-1]==b[1][2])
    {
        if(a[i-1][j]==b[2][1])
        {
            int k=1;
            int l=1;
            for(int jj=j;jj<=j-m+1 && ok4;jj++)
            {
                l=1;
                for(int ii=i;ii<=i-m+1 && ok4;ii++)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok4=0;
                    l++;
                }
                k++;
            }
        }
        else ok4=0;
        nr+=ok4;
        ok4=1;
        if(a[i+1][j]==b[2][1])
        {
            int k=1;
            int l=1;
            for(int ii=i;ii<=i+m-1 && ok4;ii++)
            {
                l=1;
                for(int jj=j;jj<=j-m+1 && ok4;jj++)
                {
                    if(a[ii][jj]!=b[k][l])
                        ok4=0;
                    l++;
                }
                k++;
            }
        }
        else ok4=0;
        nr+=ok4;
    }
    int ok5=1;
    if(a[i][j+1]==b[2][2])
    {
        for(int ii=1;ii<=m && ok5;ii++)
        {
            if(a[i][j+ii-1]!=a[ii][ii])
                ok5=0;
        }
    }
    else ok5=0;
    nr+=ok5;
    if(a[i][j-1]==b[2][2])
    {
        for(int ii=1;ii<=m && ok5;ii++)
        {
            if(a[i][j-ii+1]!=a[ii][ii])
                ok5=0;
        }
    }
    else ok5=0;
    nr+=ok5;
    return nr;
} */

void matint()
{
    for(int i=1;i<=m;i++)
        for(int j=1;j<=m;j++)
        {
            int c=b[i][j]-'0';
            f[c]++;
        }
}
void clear()
{
    for(int i=65;i<=122;i++)
        v[i]=0;
}

int verif(int i,int j)
{

    for(int ii=i;ii<=i+m-1;ii++)
    {
        for(int jj=j;jj<=j+m-1;jj++)
        {
            int c=a[ii][jj]-'0';
            v[c]++;
        }
    }
    for(int i=65;i<=122;i++)
        if(v[i]!=f[i]) return 0;
    return 1;
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            fin>>a[i][j];
    }
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=m;j++)
            fin>>b[i][j];
    }
    matint();
    int nr=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i<=m && j<=m && verif(i,j))
            {
                nr++;
                clear();
            }
        }
    }
    fout<<nr;
    return 0;
}