Pagini recente » Cod sursa (job #1078490) | Cod sursa (job #2614802) | Cod sursa (job #1271061) | Cod sursa (job #48338) | Cod sursa (job #106283)
Cod sursa(job #106283)
#include <stdio.h>
#include <vector>
#include <set>
#include <bitset>
using namespace std;
#define NMAX 10000010
#define MOD 1000000
#define MOD1 999997
#define MOD2 893923
#define MOD3 983917
#define MOD4 612313
#define MOD5 826931
#define MOD6 391237
#define MOD7 597173
bitset<MOD> h1, h2, h3, h4, h5, h6, h7;
#define ins(x) (h1[(x)%MOD1] = h2[(x)%MOD2] = h3[(x)%MOD3] = h4[(x)%MOD4] = h5[(x)%MOD5] = h6[(x)%MOD6] = h7[(x)%MOD7] = 1)
#define is(x) (h1[(x)] && h2[(x)] && h3[(x)] && h4[(x)] && h5[(x)] && h6[(x)] && h7[(x)])
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;
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');
h1[x%MOD1] = h2[x%MOD2] = h3[x%MOD3] = h4[x%MOD4] = h5[x%MOD5] = h6[x%MOD6] = h7[x%MOD7] = 1;
}
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)
{
res += is(t);
t = (long long)t - p*(s[i]-'a');
t = (long long)t*3 + (s[i+n]-'a');
}
printf("%lld\n", res);
return 0;
}