Pagini recente » Cod sursa (job #1114076) | Cod sursa (job #1590214) | Cod sursa (job #2015396) | Cod sursa (job #783574) | Cod sursa (job #778966)
Cod sursa(job #778966)
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define mod 11003
vector <unsigned int> v[mod];
char c[10000001],sir[21];
inline int cauta(unsigned int x)
{
int k;
k=x%mod;
for(vector <unsigned int> :: iterator it=v[k].begin();it!=v[k].end();it++)
if(*it==x)
return 1;
return 0;
}
inline void adauga(unsigned int x)
{
if(cauta(x))
return ;
v[x%mod].push_back(x);
}
int main ()
{
int i,n,m,p,nr;
unsigned int x;
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
fgets(c,sizeof(c),stdin);
n=strlen(c)-2;
m=-1;
while(feof(stdin)==0) {
fgets(sir,sizeof(sir),stdin);
if(m==-1)
m=strlen(sir)-2;
x=0;
for(i=0;i<=m;i++)
x=x*3+sir[i]-'a';
adauga(x);
}
fclose(stdin);
p=1;
for(i=1;i<=m;i++)
p=p*3;
x=0;
for(i=0;i<=m;i++)
x=x*3+c[i]-'a';
nr=cauta(x);
for(i=m+1;i<=n;i++) {
x=3*(x-p*(c[i-m-1]-'a'))+c[i]-'a';
nr=nr+cauta(x);
}
printf("%d",nr);
fclose(stdout);
return 0;
}