Pagini recente » Cod sursa (job #2479954) | Cod sursa (job #1592228) | Cod sursa (job #340384) | Cod sursa (job #394366) | Cod sursa (job #343316)
Cod sursa(job #343316)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define MAX_N 100000005
#define MAX_M 1005
#define P 3
#define MOD 99987
#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)
char S[MAX_N];
int N, M, P1(1), Sol;
unsigned H;
vector <unsigned> G[MOD];
void insert(unsigned x)
{
unsigned k = x % MOD;
G[k].push_back(x);
}
int find(unsigned x)
{
unsigned k = x % MOD;
foreach(G[k])
if(*it == x)
return 1;
return 0;
}
void citire()
{
char s[MAX_M];
fgets(S, MAX_N, stdin);
N = strlen(S) - 1;
while(fgets(s, MAX_M, stdin))
{
unsigned h = 0;
M = strlen(s) - 1;
for(int i = 0; i < M; ++i)
h = h * P + (s[i] - 'a');
insert(h);
}
}
void solve()
{
for(int i = 0; i < M; ++i)
{
H = H * P + (S[i] - 'a');
if(i)
P1 *= P;
}
for(int i = M; i <= N; ++i)
{
Sol += find(H);
H = (H - (S[i-M] - 'a')*P1) * P + (S[i] - 'a');
}
printf("%d\n",Sol);
}
int main()
{
freopen("abc2.in","rt",stdin);
freopen("abc2.out","wt",stdout);
citire();
solve();
}