Pagini recente » Cod sursa (job #986891) | Cod sursa (job #2018592) | Cod sursa (job #989990) | Cod sursa (job #1916175) | Cod sursa (job #1997535)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#define MOD 666013
#define un unsigned
using namespace std;
ifstream si("abc2.in");
ofstream so("abc2.out");
vector<un int> h[MOD];
inline bool check(un int cod)
{
un int x=cod%MOD;
int n=h[x].size();
for(int i=0;i<n;++i)
{
if(h[x][i]==cod)
return true;
}
return false;
}
inline void add(un int cod)
{
un int x=cod%MOD;
int n=h[x].size();
for(int i=0;i<n;++i)
{
if(h[x][i]==cod)
return;
}
h[x].push_back(cod);
}
int main()
{
string s;
si>>s;
string x;
int n;
while(1)
{
if(si.eof())
break;
si>>x;
n=x.size();
un int cod=0;
for(int i=0;i<n;++i)
{
cod=(cod*3+x[i]-'a');
}
add(cod);
}
int m=s.size();
un int cod=0;
for(int i=0;i<n;++i)
{
cod=(cod*3+s[i]-'a');
}
un int p3=1;
for(int i=1;i<n;++i)
{
p3=(p3*3);
}
//cout<<cod;
int cont=0;
if(check(cod))
{
++cont;
//cout<<0<<' ';
}
for(int i=n;i<m;++i)
{
//cout<<(cod-(p3*(s[i-n]-'a'))%MOD+MOD)%MOD<<'\n';;
cod=((cod-(p3*(s[i-n]-'a')))*3+s[i]-'a');
if(check(cod))
{
//cout<<i-n+1<<' ';
++cont;
}
}
so<<cont;
return 0;
}