Cod sursa(job #2321664)

Utilizator rares1012Rares Cautis rares1012 Data 16 ianuarie 2019 14:11:13
Problema Potrivirea sirurilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

char ck[2000000];

int sf[2000000];

int af[1000];

int main()
{
    int n=0,k=0,s=0,m,q=0;
    char c;
    FILE*fi,*fo;
    fi=fopen("strmatch.in","r");
    fo=fopen("strmatch.out","w");
    c=fgetc(fi);
    ck[n]=c;
    n++;
    c=fgetc(fi);
    while(c!='\n' && c!=EOF){
        ck[n]=c;
        while(k>0 && c!=ck[k]){
            k=sf[k-1];
        }
        if(c==ck[k])
            k++;
        sf[n]=k;
        c=fgetc(fi);
        n++;
    }
    c=fgetc(fi);
    k=0;
    q=0;
    while(c!='\n' && c!=EOF){
        while(k>0 && c!=ck[k]){
            k=sf[k-1];
        }
        if(c==ck[k]){
            k++;
            if(k==n){
                k=sf[k-1];
                if(s<1000)
                    af[s]=q;
                s++;
            }
        }
        c=fgetc(fi);
        q++;
    }
    fprintf(fo,"%d\n",s);
    for(int i=0;i<s && i<1000;i++){
        fprintf(fo,"%d ",af[i]-n+1);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}