Cod sursa(job #2361584)

Utilizator dimi999Dimitriu Andrei dimi999 Data 2 martie 2019 17:02:43
Problema Potrivirea sirurilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("strmatch.in");
ofstream fout("strmatch.out");

int n,m;
string a,b;

int v[2000005],sol[1005];

int main()
{
    int i,j=0,ans=0;
    fin>>b;
    fin>>a;
    n=a.size()-1;
    m=b.size()-1;
    v[0]=0;
    for(i=1;i<=m;i++)
        {
            while(b[i]!=b[j]&&j!=0)
                    j=v[j-1];
            if(b[i]==b[j])
                    j++;
            v[i]=j;
        }
       int poz=0;
       i=0;
       for(i=0;i<=n;i++)
       {
            while(poz!=0&&b[poz]!=a[i])
                poz=v[poz-1];
            if(a[i]==b[poz])
            {
                poz++;
                if(poz==m+1)
                {
                    ans++;
                    if(ans<=1000)
                        sol[ans]=i-m;
                    poz=v[m];
                }
            }

       }
       fout<<ans<<'\n';
       for(i=1;i<=min(1000,ans);i++)
        fout<<sol[i]<<" ";
    return 0;
}