Cod sursa(job #1203640)

Utilizator DenisacheDenis Ehorovici Denisache Data 1 iulie 2014 01:06:58
Problema Potrivirea sirurilor Scor 32
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int Z[4000005],i,N,M,nr;
char S[4000005];
int main()
{
    freopen("strmatch.in","r",stdin);
    freopen("strmatch.out","w",stdout);
    gets(S+1); N=strlen(S+1);
    gets(S+N+1); M=strlen(S+N+1);
    int L=1,R=1;
    for (i=2;i<=N+M;i++)
    {
        if (R>=i) Z[i]=min(Z[i-L+1],R-i+1);
        for (;i+Z[i]<=N+M && S[i+Z[i]]==S[Z[i]+1];Z[i]++);
        if (i+Z[i]-1>R) L=i,R=i+Z[i]-1;
        if (Z[i]>=N) nr++;
    }
    printf("%d\n",nr);
    for (i=N;i<=N+M;i++) if (Z[i]>=N) printf("%d ",i-N-1);
    return 0;
}