Pagini recente » Cod sursa (job #4210) | Cod sursa (job #1022243) | Cod sursa (job #1951222) | Cod sursa (job #2232927) | Cod sursa (job #1481481)
#include<cstdio>
#include<vector>
#include<cstring>
#define MOD 666013
using namespace std;
long long nr, i, a, SOL;
long long v[250], w[23];
char S[10000003], T[21];
vector < long long > Hash[MOD + 3];
inline bool Search(long long);
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
gets(S);
w[1] = 1;
for (i = 2; i <= 20; i++)
w[i] = w[i - 1] * 3;
v['a'] = 0, v['b'] = 1, v['c'] = 2;
while (gets(T))
{
nr = strlen(T);
a = 0;
for (i = 0; i < nr; i++)
a += w[i + 1] * v[T[i]];
Hash[a % MOD].push_back(a);
}
a = 0;
for (i = 0; i < nr; i++)
a += w[i + 1] * v[S[i]];
SOL = Search(a);
for (i = nr; i < strlen(S); i++)
{
a /= 3;
a += w[nr] * v[S[i]];
SOL += Search(a);
}
printf("%d\n", SOL);
}
inline bool Search(long long Val)
{
vector <long long> :: iterator it;
int line = Val % MOD;
for (it = Hash[line].begin(); it != Hash[line].end(); it++)
if (*it = Val)
return 1;
return 0;
}