Pagini recente » Cod sursa (job #2645703) | Cod sursa (job #835362) | Cod sursa (job #2217893) | Cod sursa (job #2360250) | Cod sursa (job #1225154)
#include <fstream>
#include <cstring>
#include <vector>
#include <set>
#define DIM 10000011
#define ct 50011
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
char A[DIM],w[24],*p;
set<int> S;
set<int>::iterator z;
vector<int> v;
vector<pair<int,int> > h[ct+1];
vector<pair<int,int> >::iterator it;
int main(void){
register int n,aux,q,num,k,i;
register bool ok;
vector<int>::iterator t;
f>>A;
while(f>>w){
q=0,num=1,ok=false;
for(p=w;*p;p++)
q=q*3+(*p-'a');
S.insert(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(S.find(q)!=S.end())
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(S.find(q)==S.end())
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;
}