Cod sursa(job #2787378)

Utilizator rARES_4Popa Rares rARES_4 Data 23 octombrie 2021 10:24:20
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define nr_prim 27143
#define baza 37
using namespace std;
ifstream f("a.in");
ofstream g ("a.out");
int cnt;
int rasp[2000001];
char patt[2000001],text[2000001];
void cautare()
{
    long long baza_la_puterea_m = 1;
    int m = strlen(patt),n = strlen(text);
    for(int i = 0;i<m;i++)
    {
        baza_la_puterea_m = (baza_la_puterea_m *baza)%nr_prim;
    }
    long long patt_hash = 0,text_hash= 0;
    for(int i = 0;i<m;i++)
    {
        patt_hash = (patt_hash*baza + patt[i])%nr_prim;
        text_hash = (text_hash*baza + text[i])%nr_prim;
    }
    for(int i =0;i<=n-m;i++)
    {
        if(patt_hash == text_hash)
        {
            bool adev = true;
            for(int j = 0;j<m;j++)
                if(patt[j]!= text[j+i])
                {
                adev = false;
                break;
                }
            if(adev)
                rasp[cnt++] = i;
        }
        if(i<n-m)
        {
             text_hash = (((text_hash-(1ll*text[i]*baza_la_puterea_m)%nr_prim + nr_prim)*baza)%nr_prim+text[i+m])%nr_prim;
        }
    }

}
int main()
{
    f.getline(patt,2000000);
    f.getline(text,2000000);
    cautare();
    cout << cnt;
}