Cod sursa(job #1952843)

Utilizator matystroiaStroia Matei matystroia Data 4 aprilie 2017 13:46:49
Problema Aho-Corasick Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <cstring>
using namespace std;

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

const int N=1e6+5, M=1e4+5;

char a[N], b[M];
int n, m, k, pi[M];

int main()
{
    fin>>a>>k;
    n=strlen(a);

    for(int cuv=0;cuv<k;++cuv)
    {
        fin>>b;
        m=strlen(b);
        int j=0, cnt=0;
        pi[0]=0;
        for(int i=1;i<m;++i)
        {
            while(j>0&&b[i]!=b[j])
                j=pi[j-1];
            if(b[i]==b[j])
                ++j;
            pi[i]=j;
        }

        j=0;
        for(int i=0;i<n;++i)
        {
            while(j>0&&b[j]!=a[i])
                j=pi[j-1];
            if(b[j]==a[i])
                ++j;
            if(j==m)cnt++;
        }

        fout<<cnt<<'\n';
    }

    return 0;
}