Pagini recente » Cod sursa (job #1838495) | Cod sursa (job #2301974) | Cod sursa (job #1547766) | Cod sursa (job #177728) | Cod sursa (job #1518325)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n1=100007,n2=100021,b=3;
struct bine { int numar1 , numar2 ;};
bine v[50001];
bool sortare ( bine a , bine b ){
if(a.numar1!=b.numar1)
return a.numar1<b.numar1;
return a.numar2<b.numar2;
}
int k;
char s[10000001],s1[21];
int gasire( int a1 , int b1){
int pp,i;
pp=1;
for(i=1;i<=k&&pp==1;i++)
if(v[i].numar1==a1&&v[i].numar2==b1)
pp=0;
if(pp==0)
return 1;
return 0;
}
int main(){
int nr1,nr2,p1,p2,n,i,k1,k2,nnr1,nnr2,r,cate,j;
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
scanf("%s",&s);k=0;
nr1=nr2=0;
p1=p2=1;
while(scanf("%s",&s1)!=EOF){
n=strlen(s1); nr1=nr2=0; p1=p2=1;
for(i=0;i<n;i++){
nr1=((nr1*b)%n1+s1[i]-'a'+1)%n1;
nr2=((nr2*b)%n2+s1[i]-'a'+1)%n2;
if(i!=0){
p1=(p1*b)%n1;
p2=(p2*b)%n2;
}
}
k++;
v[k].numar1=nr1;
v[k].numar2=nr2;
}
sort(v+1,v+k+1,sortare);
k1=n;
n=strlen(s);
nnr1=nnr2=0;
k2=0;cate=0;
for(i=0;i<k1;i++){
nnr1=((nnr1*b)%n1+s[i]-'a'+1)%n1;
nnr2=((nnr2*b)%n2+s[i]-'a'+1)%n2;
}
r=0;
r=gasire(nnr1,nnr2);
if(r!=0)
cate++;
for(i=0,j=k1;j<n;i++,j++){
nnr1=((((nnr1-((s[i]-'a'+1)*p1))*b)%n1+n1)%n1+(s[j]-'a'+1))%n1;
nnr2=((((nnr2-((s[i]-'a'+1)*p2))*b)%n2+n2)%n2+(s[j]-'a'+1))%n2;
r=0;
r=gasire(nnr1,nnr2);
if(r!=0)
cate++;
}
printf("%d\n",cate);
return 0;
}