Pagini recente » Cod sursa (job #2325312) | Cod sursa (job #191993) | Cod sursa (job #242174) | Cod sursa (job #600171) | Cod sursa (job #1061095)
#include<cstdio>
#include<string>
#include<iostream>
#include<vector>
using namespace std;
string text, cuv;
vector <unsigned int> hh[66013];
unsigned int p;
void hashuire(unsigned int x)
{
unsigned int m;
m = x % 66013;
for(vector <unsigned int> :: iterator it = hh[m].begin(); it != hh[m].end(); ++ it)
if((*it) == x)
return ;
hh[m].push_back(x);
}
bool verif(unsigned int x)
{
unsigned int m;
m = x % 66013;
for(vector <unsigned int> :: iterator it = hh[m].begin(); it != hh[m].end(); ++ it)
if((*it) == x)
return 1;
return 0;
}
int main()
{
freopen("abc2.in", "r", stdin);
freopen("abc2.out", "w", stdout);
unsigned int x;
int n, m, i, j, nr = 0;
cin>>text;
n = text.length();
cin>>cuv;
while(! cin.eof())
{
x = 0;
m = cuv.length();
for(i = 0; i < m; ++ i)
x = x + x + x + cuv[i] - 'a';
hashuire(x);
cin>>cuv;
}
x = 0;
p = 1;
for(i = 1; i <= m; ++ i)
p = p * 3;
for(i = 0; i < n; ++ i)
{
x = x + x + x + text[i] - 'a';
while(x >= p)
x -= p;
if(verif(x) && i >= m - 1)
++ nr;
}
printf("%d\n", nr);
return 0;
}