Cod sursa(job #2063211)

Utilizator GrasuneAlexandruGrasune Alexandru Mihai GrasuneAlexandru Data 11 noiembrie 2017 10:13:30
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

char s[2000000],a[2000000];
int p[15],n,m;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
void prefix()
{
    int i=0;
    for(int j=1;j<m;j++)
    {
        if(a[i]==a[j])
        {
            p[j]=1+p[j-1];
            i++;
        }
        else
        {
            i=p[j-1];
            if(a[i]==a[j])
            {
                p[i]=1;
                i++;
            }
        }
    }

}
void kmp()
{
    int ok=1;
    int i=0,j=0;
    while(i<n)
    {

        while(s[i]==a[j])
        {
            i++;j++;
            if(j==m&&ok<=1000)
                fout<<i-m<<endl;
                if(i>=n)
                    break;

        }
        j=p[j-1];
        i++;

    }

}



int main()
{

    fin.getline(a,2000000);
    fin.getline(s,2000000);
    n=strlen(s);
    m=strlen(a);
    prefix();
    kmp();
    /*for(int i=0; i<m; i++)
        cout<<p[i];*/
    return 0;
}