Cod sursa(job #3241430)

Utilizator Gergo123Schradi Gergo Gergo123 Data 30 august 2024 09:37:42
Problema Aho-Corasick Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>

#define DL 1000005
#define DC 10005

using namespace std;

string tx, c;
vector<int> pi(DC);
int n, lg, lgc;

void p() {
    for(int i = 2, q = 0; i <= lgc; ++i) {
        while(q != 0 && c[i - 1] != c[q])
            q = pi[q];
        if(c[i - 1] == c[q])
            ++q;
        pi[i] = q;
    }
}

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

    fin >> tx >> n;
    lg = tx.length();

    for(int k = 0; k < n; ++k) {
        fin >> c;
        lgc = c.length();
        int pot = 0;

        pi.assign(lgc + 1, 0);
        p();

        for(int i = 0, q = 0; i < lg; ++i) {
            while(q != 0 && tx[i] != c[q])
                q = pi[q];
            if(tx[i] == c[q])
                ++q;
            if(q == lgc) {
                ++pot;
                q = pi[q];
            }
        }

        fout << pot << endl;
    }

    return 0;
}