Cod sursa(job #2047076)

Utilizator nedelcu11Nedelcu Mihai Vlad nedelcu11 Data 24 octombrie 2017 15:38:29
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define Dmax 2000005
#define d 73
#define q 100007
using namespace std;
ifstream f("rk.in");
char P[Dmax],T[Dmax];
int n,m;
int verif(int s)
{   for(int i=1;i<=m;i++)
        if(P[i]!=T[s+i]) return 0;
    return 1;
}
int main()
{   f>>(P+1)>>(T+1);
    m=strlen(P+1),n=strlen(T+1);
    if(m>n) return 0;
    int h=1;
    for(int i=1;i<m;i++) h=h*d%q;
    int p=0,t=0;
    for(int i=1;i<=m;i++)
    {   p=(p*d+P[i])%q;
        t=(t*d+T[i])%q;
    }
    for(int s=0;s<=n-m;s++)
    {   if(p==t && verif(s)) cout<<"Modelul apare cu deplasamentul "<<s<<'\n';
        if(s<n-m) t=((d*(t-T[s+1]*h)+T[s+m+1])%q+q)%q;
    }
    return 0;
}