Pagini recente » Cod sursa (job #959560) | Cod sursa (job #2164624) | Cod sursa (job #2476012) | Cod sursa (job #1692769) | Cod sursa (job #98341)
Cod sursa(job #98341)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
#define NMAX 10000010
#define Q 101869
void read();
int find(long long x);
void add(long long x);
char S[NMAX];
vector<long long> H[Q];
int M, N;
int main()
{
freopen("abc2.in", "r", stdin);
freopen("abc2.out", "w", stdout);
read();
return 0;
}
void read()
{
char A[32];
long long ok, la;
int i, j;
M = -1;
fgets(S, NMAX, stdin);
S[strlen(S) - 1] = 0;
for(;!feof(stdin);)
{
scanf("%s ", A);
if(M == -1) M = strlen(A);
ok = 0;
for(i = 0; i < M; i++)
ok = ok * 3 + A[i] - 'a';
add(ok);
}
N = strlen(S);
int rez = 0;
la = 1;
ok = 0;
if(M <= N)
for(i = 0; i < M; i++)
{
la = la * 3;
ok = ok * 3 + S[i] - 'a';
}
la /= 3;
for(i = 0; i + M <= N; i++)
{
if(find(ok))
rez++;
ok -= la * (S[i] - 'a');
ok *= 3;
if(i + M < N)
ok += S[i + M] - 'a';
}
printf("%d\n", rez);
}
void add(long long x)
{
H[x % Q].push_back(x);
}
int find(long long x)
{
int i;
for(i = 0; i < H[x % Q].size(); i++)
if(H[x % Q][i] == x)
return 1;
return 0;
}