Pagini recente » Cod sursa (job #2556699) | Cod sursa (job #1842200) | Cod sursa (job #1222369) | Cod sursa (job #623692) | Cod sursa (job #908903)
Cod sursa(job #908903)
#include<fstream>
#include<cstring>
#include<set>
#define MOD 666013
using namespace std;
int n,m,sol;
char A[10000100],B[25];
set <long long> S[666013];
inline bool Search(long long val)
{
set <long long>::iterator it;
it=S[val%MOD].lower_bound(val);
if(it!=S[val%MOD].end() && *it==val)
return true;
return false;
}
int main()
{
int i;
long long rez,p;
ifstream fin("abc2.in");
fin>>(A+1);
n=strlen(A+1);
while(fin>>(B+1))
{
m=strlen(B+1);
rez=0LL;
for(i=1;i<=m;i++)
rez=rez*3LL+1LL*(B[i]-'a');
S[rez%MOD].insert(rez);
}
fin.close();
if(n>=m)
{
rez=0LL;
p=1LL;
for(i=1;i<=m;i++)
{
rez=rez*3LL+1LL*(A[i]-'a');
if(i<m)
p=p*3LL;
}
if(Search(rez)==true)
sol++;
for(i=m+1;i<=n;i++)
{
rez=rez-p*(A[i-m]-'a');
rez=rez*3LL+1LL*(A[i]-'a');
if(Search(rez)==true)
sol++;
}
}
ofstream fout("abc2.out");
fout<<sol<<"\n";
fout.close();
return 0;
}