Pagini recente » Cod sursa (job #2816921) | Cod sursa (job #1474689) | Cod sursa (job #2825522) | Cod sursa (job #273488) | Cod sursa (job #2472715)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
char s[10000005],c[22]; long long i,siz,auxmod,modi=1009,len,lens,gasit,j,dim;
long long nr,p=1; bool ok;
vector<int> v[1010];
int main()
{
//citire text
fin.getline(s,10000002);
fin.getline(c,21); len=strlen(c);
for(i=nr=0;i<len;i++)nr=nr*3+(c[i]-'a');
v[nr%modi].push_back(nr);
while(fin.getline(c,21)){
for(i=nr=0;i<len;i++)nr=nr*3+(c[i]-'a');
auxmod=nr%modi;
dim=v[auxmod].size();
for(i=0,ok=0;i<dim;i++)if(v[auxmod].at(i)==nr){ok=1; break;}
if(!ok)v[auxmod].push_back(nr);
}
for(i=2;i<=len;i++)p*=3; lens=strlen(s);
for(i=nr=0;i<len && i<lens;i++)nr=nr*3+(s[i]-'a');
while(i<lens){
auxmod=nr%modi;
dim=v[auxmod].size();
for(j=0,ok=0;j<dim;j++)if(v[auxmod].at(j)==nr){ok=1;break;}
if(ok)gasit++;
nr=(nr-(s[i-len]-'a')*p)*3+(s[i]-'a');
i++;
}
auxmod=nr%modi; dim=v[auxmod].size();
for(j=0,ok=0;j<dim;j++)if(v[auxmod].at(j)==nr){ok=1;break;}
if(ok)gasit++;
fout<<gasit;
return 0;
}