Pagini recente » Cod sursa (job #2791137) | Cod sursa (job #197227) | Cod sursa (job #260970) | Cod sursa (job #42321) | Cod sursa (job #1225159)
#include <fstream>
#include <cstring>
#include <vector>
#define DIM 10011011
#define ct 50011
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
char A[DIM],w[24],*p;
vector<long long> v,ID[ct+1];
vector<pair<long long,int> > h[ct+1];
vector<pair<long long,int> >::iterator it;
inline bool caut(long long q){
vector<long long>::iterator it1;
if(ID[q%ct].empty())
return false;
for(it1=ID[q%ct].begin();it1!=ID[q%ct].end();it1++)
if(*it1==q)
return true;
return false;
}
int main(void){
register int n,aux,num,k,i;
register long long q;
register bool ok;
f>>A;
while(f>>w){
q=0,num=1,ok=false;
for(p=w;*p;p++)
q=q*3+(*p-'a');
ID[q%ct].push_back(q);
}
k=strlen(w),n=strlen(A);
int sol=0;
q=0,num=1;
for(p=A;p-A<k;p++)
q=q*3+(*p-'a'),num*=3;
if(caut(q))
h[q%ct].push_back(make_pair(q,1)),sol++;
num/=3;
for(;*p;p++){
q=(q-(*(p-k)-'a')*num)*3+(*p-'a');
if(!caut(q))
continue;
ok=false;
for(it=h[q%ct].begin();it!=h[q%ct].end();it++)
if(it->first==q){
it->second++,ok=true,sol++;
break;
}
if(!ok)
h[q%ct].push_back(make_pair(q,1)),sol++;
}
g<<sol;
f.close();
g.close();
return 0;
}