Pagini recente » Cod sursa (job #1777508) | Cod sursa (job #1627434) | Cod sursa (job #1004268) | Cod sursa (job #2882161) | Cod sursa (job #531112)
Cod sursa(job #531112)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
const char InFile[]="abc2.in";
const char OutFile[]="abc2.out";
const unsigned int MaxN=10111000;
const unsigned int MaxL=50;
const unsigned int MOD=666013;
ifstream fin(InFile);
ofstream fout(OutFile);
char str[MaxN],cuv[MaxL];
unsigned int N,L,sol,cpow,cod;
vector<unsigned int> H[MOD];
inline void add(unsigned int key)
{
unsigned int hash=key%MOD;
vector<unsigned int>::iterator it;
for(it=H[hash].begin();it!=H[hash].end();++it)
{
if(*it==key)
{
return;
}
}
H[hash].push_back(key);
}
inline unsigned int get(unsigned int key)
{
unsigned int hash=key%MOD;
vector<unsigned int>::iterator it;
for(it=H[hash].begin();it!=H[hash].end();++it)
{
if(*it==key)
{
return 1;
}
}
return 0;
}
int main()
{
fin.getline(str,sizeof(str));
N=strlen(str);
while(fin.getline(cuv,sizeof(cuv)))
{
if(L==0)
{
L=strlen(cuv);
}
cod=0;
for(register unsigned int i=0;i<L;++i)
{
cod*=3;
cod+=cuv[i]-'a';
cuv[i]=0;
}
add(cod);
}
fin.close();
cpow=1;
for(register unsigned int i=1;i<L;++i)
{
cpow*=3;
}
cod=0;
for(register unsigned int i=0;i<L;++i)
{
str[i]-='a';
cod*=3;
cod+=str[i];
}
sol+=get(cod);
for(register unsigned int i=L;i<N;++i)
{
str[i]-='a';
cod-=cpow*str[i-L];
cod*=3;
cod+=str[i];
sol+=get(cod);
}
fout<<sol;
fout.close();
return 0;
}