Pagini recente » Cod sursa (job #1644849) | Cod sursa (job #1121340) | Cod sursa (job #203072) | Cod sursa (job #190059) | Cod sursa (job #1997536)
#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;
getline(si,s);
string x;
int n;
while(getline(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;
}