Pagini recente » Cod sursa (job #1965431) | Cod sursa (job #1573268) | Cod sursa (job #2544265) | Cod sursa (job #54890) | Cod sursa (job #98495)
Cod sursa(job #98495)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
#define NMAX 10000010
#define Q 30103
void read();
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;
int u;
for(i = 0; i + M <= N; i++)
{
u = ok % Q;
/*for(j = 0; j < H[u].size(); j++)
if(H[u][j] == ok)
{
rez++;
break;
}*/
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)
{
int i;
int u;
u = x % Q;
for(i = 0; i < H[u].size(); i++)
if(H[u][i] == x)
return;
H[u].push_back(x);
}