Cod sursă (job #546343)

Utilizator avatar munteanue28 Munteanu Elena munteanue28 IP ascuns
Problemă Fotografie (clasele 9-10) Compilator cpp | 1,78 kb
Rundă lasm_19_03_2020_cl_12_a Status evaluat
Dată 19 mar. 2020 16:22:47 Scor 60
#include <bits/stdc++.h>
using namespace std;
	
	ifstream fi ("fotografie.in");
    ofstream fo ("fotografie.out");
const int Q=1005;
char lin[Q][Q], f[Q];
int l,c,lf,cf;
short back[Q];
bool bun[Q][Q];

void lena (int x)
{

    int g=0;

    for(int i=x; i<=l-lf+x; i++)
    {
        for(int j=1; j<=c; j++)
        {
            if(f[1+g]==lin[i][j])
                g++;
            else
            {
                while(g)
                {
                    g=back[g];
                    if(f[1+g]==lin[i][j])
                    {
                        g++;
                        break;
                    }
                }
            }

            if(j>=cf)
            {
                if(g==cf)
                    g=back[g];
                else
                    bun[i-x+1][j-cf+1]=0;
            }
        }
    }
}

void balena()
{
    int bk=0;

    for(int act=2; act<=cf; act++)
    {
        if(f[bk+1]==f[act])
        {
            bk++;
        }
        else
            while(bk!=0)
            {
                bk=back[bk];
                if(f[bk+1]==f[act])
                {
                    bk++;
                    break;
                }
            }

        back[act]=bk;
    }
}

int main()
{

	fi>>l>>c;

    for(int i=1; i<=l; i++)
        fi>>lin[i]+1;

    fi>>lf>>cf;

    for(int i=1; i<=l-lf+1; i++)
    {
        for(int j=1; j<=c-cf+1; j++)
        {
            bun[i][j]=1;
        }
    }

    for(int i=1; i<=lf; i++)
    {
        fi>>f+1;
        balena();
		lena(i);
    }

    for(int i=1; i<=l; i++)
        for(int j=1; j<=c; j++)
        {
            if(bun[i][j]==1)
                fo<<i-1<<" "<<j-1<<'\n';
        }



    return 0;
}