Cod sursa(job #1216117)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 3 august 2014 13:50:55
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<fstream>
#include<vector>
#include<cstring>
#define MAXN  666013
#define pb push_back
#define LL long long
using namespace std;
LL P=3,Q=MAXN,exp[21];
vector<LL> H[MAXN];
char s[10000000],s1[21];
void putere() {
	   LL i;
	   exp[0]=1;
	   for(i=1;i<=20;i++)
	        exp[i]=P*exp[i-1];
}
vector<LL>::iterator find_value(LL X){
			vector<LL>::iterator it;		 
			LL V=X%MAXN;
			it=H[V].begin();
			while(it!=H[V].end() && *it!=X )
                                          it++;
			return it;
}
void add_value(LL X) {
	     if(find_value(X)==H[X%MAXN].end())
	                          H[X%MAXN].pb(X);
}
int main() {
    ifstream cin("abc2.in");
    ofstream cout("abc2.out");
    putere();
	LL i,j,N,M,f=0,V,k=0;
	cin>>s1;
	M=strlen(s1);
	while(!cin.eof()) {	
	cin>>s;				  		  					   
    N=strlen(s);
	f=0;	  
	for(i=0;i<N;i++)
	     f+=s[i]*exp[i];
    V=f%MAXN;
	add_value(f);	   		  			  
  }  
  if(N<=M) {
  f=0;
  for(i=0;i<N;i++)
         f+=s1[i]*exp[i]; 
		 V=f%MAXN;	    
   if(find_value(f)!=H[V].end()) k++; 
  while(i<M) {		 
  	  f=f-s1[i-N];
	  f=f/3;
	  f+=s1[i]*exp[N-1];
	  V=f%MAXN;
	  if(find_value(f)!=H[V].end()) k++;
	  i++;
}            }
cout<<k;        
return 0;
}