Pagini recente » Cod sursa (job #3289175) | Cod sursa (job #1233449) | Cod sursa (job #2915372) | Cod sursa (job #907219) | Cod sursa (job #99288)
Cod sursa(job #99288)
#include<stdio.h>
#include<string.h>
char M[10000010],*N,pi[30],a[50001][30];
int n;
void PI()
{int k=0,i,n=strlen(N);
pi[0]=pi[1]=0;
for(i=1;i<n;i++)
{while(k>0&&N[k]!=N[i])
k=pi[k];
if(N[k]==N[i]) k++;
pi[i+1]=k;}
}
int KMP()
{int n=strlen(N),m=strlen(M),i,k=0,nr=0;
PI();
for(i=0;i<m;i++)
{while(k>0&&N[k]!=M[i])
k=pi[k];
if(N[k]==M[i]) k++;
if(k==n) nr++; }
return nr;
}
long long num;
int poz(int st,int dr)
{int x=0,y=-1;
char aux[20];
while(st<dr)
{if(strcmp(a[st],a[dr])>0)
{strcpy(aux,a[st]);
strcpy(a[st],a[dr]);
strcpy(a[dr],aux);
if(x) x=0,y=-1;
else x=1,y=0;}
st=st+x,dr=dr+y;}
return st;
}
void sort(int st,int dr)
{if(st>=dr) return;
int k=poz(st,dr);
sort(st,k-1);
sort(k+1,dr);}
int main()
{freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
scanf(" %s ",M);
while(!feof(stdin))
{scanf(" %s ",a[++n]);
/*
if(!strstr(a,N))
{strcat(a,N);
a[strlen(a)]=' ';
num=num+KMP();} */ }
sort(1,n);
for(int i=1;i<=n;i++)
if(strcmp(a[i],a[i-1]))
{N=a[i];
num=num+KMP();}
printf("%lld",num);
fclose(stdout);
return 0;}