Cod sursa(job #1822671)

Utilizator SaitamaSaitama-san Saitama Data 5 decembrie 2016 12:43:20
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nMax = 2000005;

int n, m, pi[nMax], sol[nMax];
char a[nMax], b[nMax];

inline void Pi()
{
    int k,i;
    pi[1] = k = 0;
    for(i = 2; i <= n; ++i)
    {
        while(k && a[k + 1] != a[i])
            k = pi[k];
        if(a[k + 1] == a[i])
            ++k;
        pi[i] = k;
    }
}

int main()
{
    int i, k;
    fin >> (a + 1);
    fin >> (b + 1);
    n = strlen(a + 1);
    m = strlen(b + 1);
    Pi();
    k = 0;
    for(i = 1;i <= m; ++i)
    {
        while(k && a[k + 1] != b[i])
            k = pi[k];
        if(a[k + 1] == b[i])
            ++k;
        if(k == n)
            sol[++sol[0]] = i - n;
    }
    for(i = 1; i <= sol[0] && i <= 1000; ++i)
        fout << sol[i] << " ";
    return 0;
}