Cod sursa(job #2321026)

Utilizator rares1012Rares Cautis rares1012 Data 15 ianuarie 2019 16:39:30
Problema Potrivirea sirurilor Scor 16
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

char chk[2000000];

int sp[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);
    chk[0]=c;
    n++;
    c=fgetc(fi);
    while(c!='\n' && c!=EOF){
        chk[n]=c;
        while(k>0 && chk[n]!=chk[k]){
            k=sp[k-1];
        }
        if(chk[n]==chk[k]){
            k++;
            sp[n]=k;
        }
        else {
            sp[n]=k;
        }
        n++;
        c=fgetc(fi);
    }
    c=fgetc(fi);
    k=0;
    m=0;
    while(c!='\n' && c!=EOF){
        m++;
        if(c==chk[k]){
            k++;
            if(k==n){
                s++;
                k=sp[k-1];
                if(q<1000){
                af[q]=m-n;
                q++;
                }
            }
        }
        else {
            k=sp[k-1];
        }
        c=fgetc(fi);
    }
    fprintf(fo,"%d\n",s);
    for(int i=0;i<q;i++){
        fprintf(fo,"%d ",af[i]);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}