Cod sursa(job #2339650)

Utilizator robertrRotaru Stefan Robert robertr Data 9 februarie 2019 10:57:46
Problema Potrivirea sirurilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char s[2000001];
char t[2000001];
int p[2000001], n,  i, m, sol[1001], l, nr;
int main()
{
    f>>s+1>>t+1;
    n=strlen(s+1);
    m=strlen(t+1);
    p[1]=0;
    l=0;
    for(i=2;i<=n;i++)
    {
        while(l!=0&&s[i]!=s[l+1])
            l=p[l];
        if(s[i]==s[l+1])
            l++;
        p[i]=l;
    }
    l=0;
    for(i=1;i<=m;i++)
    {
        while(l!=0&&t[i]!=s[l+1])
            l=p[l];
        if(t[i]==s[l+1])
            l++;
        if(l==n)
        {
            nr++;
            if(nr<=1000)sol[nr]=i-n;
            l=p[l];
        }
    }
    g<<nr<<'\n';
    if (nr>1000)
        nr=1000;
    for(i=1;i<=nr;i++)
        g<<sol[i]<<" ";
    return 0;
}