Cod sursă (job #546494)

Utilizator avatar munteanue28 Munteanu Elena munteanue28 IP ascuns
Problemă Fotografie (clasele 9-10) Compilator cpp | 1,34 kb
Rundă lasm_19_03_2020_cl_12_a Status evaluat
Dată 19 mar. 2020 16:45:31 Scor 100
#include <bits/stdc++.h>
using namespace std;
#define MOD1 3407
#define MOD2 9973

	ifstream fi ("fotografie.in");
    ofstream fo ("fotografie.out");
    
int pow1[1001],pow2[1001],h[1001];
char A[1001][1001],B[1001][1001];
int n,m,p,q;

int main(){
    
    fi >> n >> m;
    
    for(int i=1; i<=n; i++)
        fi >> A[i]+1;
        
   fi >> p >> q;
   
    for(int i=1; i<=p; i++)
        fi >> B[i]+1;
        
    pow1[0]=pow2[0]=1;
    
    for(int i=1; i<=1000; ++i){
        pow1[i]=pow1[i-1]*MOD1;
        pow2[i]=pow2[i-1]*MOD2;
    }
    
    int h1=0;
    for(int j=1; j<=m; j++)
        for(int i=1; i<=p; i++)
            h[j]=h[j]*MOD1+A[i][j];
            
    for(int j=1; j<=q; j++)
	{
        int code=0;
        for(int i=1;i<=p; i++)
            code=code*MOD1+B[i][j];
        h1=h1*MOD2+code;
    }
    
    for(int i=1; i<=n+1-p; i++)
	{
        int h2=0;
        for(int j=1; j<=q; j++)
            h2=h2*MOD2+h[j];
            
        if(h2==h1)
            fo<<i-1<<" "<<0<<'\n';
            
        for(int j=q+1; j<=m; j++){
            h2=(h2*MOD2+h[j]-pow2[q]*h[j-q]);
            
            if(h2==h1)
                fo<<i-1<<" "<<j-q<<'\n';
        }
        for(int j=1; j<=m; j++)
            h[j]=(h[j]*MOD1+A[i+p][j]-pow1[p]*A[i][j]);
    }
    
    return 0;
}