Cod sursa(job #3320704)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 7 noiembrie 2025 09:25:34
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

char s[252], T[250];
int LPS[10000];
ifstream fin ("strmatch.in");
ofstream fout ("strmatch.out");
void PS(char s[])
{
    int m=strlen(s);
    int lg = 0;
    int i = 1;
    while (i<m)
    {
        if (s[i]==s[lg])
        {
            lg++;
            LPS[i] = lg;
            i++;
        }
        else if (lg) lg = LPS[lg - 1];
        else
        {
            LPS[i] = 0;
            i++;
        }
    }
}

void KMP(char T[], char S[])
{
    int N = strlen(T);
    int M = strlen(S);
    PS(S);
    int i=0;
    int lg=0;
    while (i<N)
    {
        if (T[i]==S[lg])
        {
            i++;
            lg++;
            if (lg == M)
            {
                cout << i-lg<<" ";
                lg = LPS[lg-1];
            }
        }
        else if(i<N && T[i] != S[lg])
            if (lg) lg = LPS[lg-1];
            else i++;
        else i++;
    }
}

int main()
{
    fin >> s>> T;
    KMP(T,s);

    return 0;
}