Pagini recente » Cod sursa (job #2494218) | Cod sursa (job #377730) | Cod sursa (job #2903052) | Cod sursa (job #1128261) | Cod sursa (job #104031)
Cod sursa(job #104031)
#include <stdio.h>
#include <vector>
#include <set>
using namespace std;
#define pb push_back
#define NMAX 10000010
const int MOD = (1<<20)-1;
inline long long f(int n)
{
if(n == 0) return 1;
long long p = 1;
for(int i = 1; i < n; ++i)
p = (long long)p * 3;
return p;
}
char s[NMAX], c[21];
int n;
long long res;
vector<long long> h[MOD];
void read()
{
scanf("%s", c);
if(!n)
n = strlen(c);
long long x = 0;
for(int i = 0; i < n; ++i)
x = (long long)x*3 + (c[i]-'a');
h[x & MOD].pb(x);
//printf("x %d\n", x);
}
int main()
{
freopen("abc2.in", "r", stdin);
freopen("abc2.out", "w", stdout);
scanf("%s", s);
while(!feof(stdin))
read();
long long t = 0, p = f(n);
for(int i = 0; i < n; ++i)
t = (long long)t*3 + (s[i]-'a');
vector<long long> :: iterator it, _end;
long long until = strlen(s)-n, aux;
for(int i = 0; i <= until; ++i)
{
aux = t & MOD;// printf("%d\n", t);
for(it = h[aux].begin(), _end = h[aux].end(); it != _end; ++it)
if(*it == t)
{
++res;//, printf("%d %d\n", *it, t);
break;
}
t = (long long)t - p*(s[i]-'a');
t = (long long)t*3 + (s[i+n]-'a');
}
printf("%lld\n", res);
return 0;
}