Cod sursa(job #2435480)

Utilizator Adrian_Popescu311Popescu Adrian Adrian_Popescu311 Data 4 iulie 2019 10:00:02
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ifstream fi("strmatch.in" );
ofstream fo("strmatch.out");

char a[25];
char b[25];
int  l[25];
int  n,m;
int  nr;

void cit()
{
    fi>>a>>b;

    n=strlen(a);
    m=strlen(b);
}


void lps()
{
    int i,j;

    while(j<n)
    {
        if(a[i]==a[j])
        {
            i++;
            l[j]=i;
            j++;
        }
        else
            if(i!=0)
                i=l[i-1];
            else
                {
                    l[j]=0;
                    j++;
                }
    }
}


void kmp()
{
    int i,j;
    i=j=0;

    while(i<m)
        {if(b[i]==a[j])
            {i++;
            j++;}

        if(j==n)
        {
            nr++;
            cout<<i-j<<" ";
            j=l[j-1];
        }
        else
            if(i<m&&a[j]!=b[i])
        {
            if(j!=0)
                j=l[j-1];
            else
                i++;
        }}


    cout<<endl<<nr;
}

int main()
{

    cit();

    cout<<a<<" "<<b;

    for(int i=0;i<n;i++)
        cout<<l[i]<<" ";

    cout<<'\n';

    lps();
    kmp();



    return 0;
}