Cod sursa(job #2038438)

Utilizator GramaDavidGrama David Sebastian GramaDavid Data 13 octombrie 2017 17:55:00
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;

ifstream q("strmatch.in");
ofstream g("strmatch.out");

char N[1000],H[10000],S[1000];
int n,h,c;
int k,f;

int main()
{
    q>>N+1;
    n=strlen(N+1);
    for(int i=2;i<=n;i=i+1){
        k=i-1;
        c=N[i];
        while(S[k]!=-1&&N[S[k]+1]!=c){
            k=S[k];
        }
        S[i]=S[k]+1;
    }
    q>>H+1;
    h=strlen(H+1);
    f=0;
    for(int i=1;i<=h;i=i+1){
        while(f!=-1){
            if(N[f+1]==H[i]){
                break;
            }
            else{
                f=S[f];
            }
        }
        if(f==-1){
            f=0;
        }
        else{
            f++;
            if(f==n){
                g<<i-n+1<<"\n";
                f=S[f];
            }
        }

    }
    return 0;
}