Cod sursa(job #3213843)

Utilizator and_Turcu Andrei and_ Data 13 martie 2024 15:16:00
Problema Potrivirea sirurilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

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


const int N=2000008;
string p,s;
int pref[N],ans[N],ct;

void Generare_pref()
{
    int i,j;
    i=0;
    for(j=1;j<p.size();j++)
    {
        while( i>0 and p[i]!=p[j] )
            i=pref[i-1];  ///   ///   ///   ///   ///
        if( p[i]==p[j] )
            i++;
        pref[j]=i;
    }
    for(int i=0;i<p.size();i++)
        cout << pref[i];
}

void Rezolvare()
{
    int i=0,j;
    for(j=0;j<s.size();j++)
    {
        while( i>0 and s[j]!=p[i] )
            i=pref[i-1];        ///      ///      ///
        if( s[j]==p[i] )
            i++;
        if( i==p.size() )
            ans[++ct]=j-p.size()+1;
    }
}

void Afis(){

    /// 100 0poz
    fout << ct << "\n";
    for(int i=1;i<=min(ct,1000);i++)
        fout << ans[i] << " ";
}

int main()
{
    fin >> p >> s;
    Generare_pref();
    Rezolvare();
    Afis();
    return 0;
}