Cod sursa(job #2316128)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 11 ianuarie 2019 10:47:20
Problema Potrivirea sirurilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");
string a,b;
int pi[2000002],pos[1005];
int main()
{
    int i,q=0,k=0,n,m;
    in>>a>>b;
    n=a.size();m=b.size();
    for(i=1;i<n;i++)
    {
        while(q&&a[q]!=a[i])
            q=pi[q];
        if(a[q]==a[i])
            q++;
        pi[i]=q;
    }q=0;
    for(i=0;i<m;i++)
    {
        while(q&&a[q]!=b[i])
            q=pi[q];
        if(a[q]==b[i])
            q++;
        if(q==n)
        {
            q=pi[n-1];
            if(k<1000)
                pos[k]=i-n+1;
            k++;
        }
    }
    out<<k<<"\n";k=min(k,1000);
    for(i=0;i<k;i++)
        out<<pos[i]<<" ";
    return 0;
}