Cod sursa(job #2868236)

Utilizator valentina_veleatVeleat Valentina-Georgiana valentina_veleat Data 10 martie 2022 20:05:48
Problema Potrivirea sirurilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char a[2000005],b[2000005];
int m,n,nr,p[2000005],pos[1050],q;
void calcprefix()
{
    int i,q=0;
    for(i=2,p[1]=0; i<=m; ++i)
    {
        while(q && a[q+1]!=a[i])q=p[q];
        if(a[q+1]==a[i])++q;
        p[i]=q;
    }
}
int main()
{
    f>>a>>b;
    m=strlen(a);n=strlen(b);
    for(int i=m; i>0; i--)a[i]=a[i-1];
    for(int i=n; i>0; i--)b[i]=b[i-1];
    a[0]=b[0]='0';
    calcprefix();
    for(int i=1; i<=n; i++)
    {
        while(q && a[q+1]!=b[i])q=p[q];
        if(a[q+1]==b[i])++q;
        if(q==m)
        {
            q=p[m];
            ++nr;
            if(nr<=1000)pos[nr]=i-m;
        }
    }
    g<<nr<<'\n';
    for(int i=1; i<=min(nr,1000); i++)g<<pos[i]<<" ";
    return 0;
}