Pagini recente » Cod sursa (job #1698622) | Cod sursa (job #1725220) | Cod sursa (job #418411) | Cod sursa (job #326144) | Cod sursa (job #3000978)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("ahocorasick.in");
ofstream g ("ahocorasick.out");
char c[1000005];
char mat[10005];
int n , m , i , lngc , p[10005] , q;
int main()
{
f >> (c + 1);
f >> n;
lngc = strlen (c + 1);
for (int i = 1 ; i <= n ; i++)
{
int cnt = 0;
f >> (mat + 1);
m = strlen (mat + 1);
p[1] = 0;
q = 0;
for (int j = 2 ; j <= m ; j++)
{
while (q > 0 && mat[q + 1] != mat[j])
q = p[q];
if (mat[q + 1] == mat[j])
q++;
p[j] = q;
}
q = 0;
for (int j = 1 ; j <= lngc ; j++)
{
while (q > 0 && mat[q + 1] != c[j])
q = p[q];
if (mat[q + 1] == c[j])
q++;
if (q == m)
cnt++;
}
g << cnt << '\n';;
for (int i = 1 ; i <= m ; i++)
p[i] = 0;
}
return 0;
}