Cod sursa(job #2201392)

Utilizator daniel.vbVasile Daniel daniel.vb Data 4 mai 2018 17:03:36
Problema Potrivirea sirurilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>




int n,t[2000002],poz[1001];
char text[2000002],pat[2000002];


int main()
{
    int i,j,s;
    FILE *f,*g;

    f=fopen("strmatch.in","r");
    g=fopen("strmatch.out","w");

    fscanf(f,"%s%s2",pat,text);

    t[0]=-1;;
    for(i=1;pat[i]!='\0';i++)
    {
        j=t[i-1];
        while(j!=-1)
        {
            if(pat[j+1]==pat[i])
                break;
            j=t[j];
        }
        if(pat[j+1]==pat[i])
            t[i]=j+1;
        else
            t[i]=-1;
    }

    n=0;s=-1;
    for(j=0;text[j]!='\0';j++)
    {
        while(s!=-1)
        {
            if(text[j]==pat[s+1])
                break;
            s=t[s];
        }
        if(text[j]==pat[s+1])
                s++;
        if(s==i-1)
        {
            n++;
            if(n<=1000)
               poz[n]=j-i+1;
        }

    }
    fprintf(g,"%d\n",n);
    for(j=1;j<=n && j<=1000;j++)
       fprintf(g,"%d ",poz[j]);

    fclose(f);
    fclose(g);
}