Pagini recente » Cod sursa (job #1312022) | Cod sursa (job #2968504) | Cod sursa (job #771451) | Cod sursa (job #2833433) | Cod sursa (job #104639)
Cod sursa(job #104639)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 10000005
unsigned int v[50001],n=0;
int compar(const void *a,const void *b){
unsigned int *aa=(unsigned int*)a,*bb=(unsigned int*)b;
if(*aa<*bb)
return -1;
if(*aa>*bb)
return 1;
return 0;
}
/*int caut(unsigned int x){
int p=0,u=n-1,m;
while(p<u){
m=(p+u)/2;
if(x<=v[m])
u=m;
else
p=u;
}
if(x==v[p])
return 1;
return 0;
}*/
int caut(unsigned int x){
unsigned int i,p;
for(p=1;p<n;p<<=1);
for(i=0;p;p>>=1)
if(i+p<n&&v[i+p]<=x)
i+=p;
return i<N&&v[i]==x?1:0;
}
int main(){
unsigned int i,m,x=0,r=0,y=1;
char s[N],c[25],*p;
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
scanf("%s\n",s);
while(scanf("%s\n",c)!=EOF){
v[n]=0;
for(p=c;*p;++p)
v[n]=v[n]*3+(*p-'a');
n++;
}
qsort(v,n,sizeof(v[0]),compar);
m=strlen(c);
for(i=0;i<m;++i){
x=x*3+(s[i]-'a');
y*=3;
}
y/=3;
r+=caut(x);
for(p=s+m;*p;++p){
x=x%y*3+(*p-'a');
r+=caut(x);
}
printf("%d\n",r);
fclose(stdin);
fclose(stdout);
return 0;
}