Pagini recente » Cod sursa (job #1442921) | Cod sursa (job #3278808) | Cod sursa (job #1434750) | Cod sursa (job #1926207) | Cod sursa (job #3241430)
#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;
}