Cod sursa(job #1449582)

Utilizator MaarcellKurt Godel Maarcell Data 10 iunie 2015 00:32:34
Problema Potrivirea sirurilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int N,M,P[2000010],K,pos[1020]; char A[2000010],B[2000010];

int main(){
    ifstream fin("strmatch.in");
    ofstream fout("strmatch.out");
    fin >> (A+1);
    fin >> (B+1);
    A[0]=B[0]='.';

    N=strlen(A)-1,M=strlen(B)-1;

    int i,q=0;
    for (i=2; i<=N; i++){
        while (q && A[q+1]!=A[i])
            q=P[q];

        if (A[q+1]==A[i]) q++;
        P[i]=q;
    }

    q=0;
    for (i=1; i<=M; i++){
        while (q && A[q+1]!=B[i])
            q=P[q];

        if (A[q+1]==B[i]) q++;

        if (q==N){
            K++;
            q=P[N];
            if (K<=1000)
                pos[K]=i-N;

        }
    }

    fout << K << "\n";
    for (i=1; i<=min(K,1000); i++)
        fout << pos[i] << " ";

    return 0;
}