Pagini recente » Cod sursa (job #1710786) | Cod sursa (job #88025) | Cod sursa (job #1306963) | Monitorul de evaluare | Cod sursa (job #1952843)
#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;
}