Pagini recente » Cod sursa (job #2389656) | Cod sursa (job #1693312) | Cod sursa (job #1065587) | Cod sursa (job #1647737) | Cod sursa (job #337141)
Cod sursa(job #337141)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int m = (1<<15);
const int L = (1<<24);
const int masca = m - 1;
char text[L];
vector<long long> h[m];
int k;
long long nr(char *s)
{
long long r=0;
for(;*s && *s!='\n';++s)
r=r*3+(*s-'a');
return r;
}
bool exista(long long r)
{
int poz = r&masca;
for(int i=0,n=h[poz].size() ; i!=n ; ++i)
if(r==h[poz][i])
return true;
return false;
}
inline void adauga(long long r)
{
h[r&masca].push_back(r);
}
int lung(char *s)
{
int k=0;
while(*s && *s!='\n')
{
++k;
++s;
}
return k;
}
void citire()
{
char cuvant[21];
long long r;
fgets(text,L,stdin);
fgets(cuvant,21,stdin);
r=nr(cuvant);
k=lung(cuvant);
adauga(r);
while(fgets(cuvant,21,stdin))
{
r=nr(cuvant);
if(!exista(r))
adauga(r);
}
}
long long pow(int a,int n)
{
long long p=1;
while(n--)
p*=a;
return p;
}
void calcul()
{
int rez=0,i;
long long val=0,mas=pow(3,k-1);
for(i=0;i<k-1;++i)
val=val*3+(text[i]-'a');
for( ; text[i] && text[i]!='\n' ; ++i)
{
val%=mas;
val=val*3+(text[i]-'a');
if(exista(val))
++rez;
}
printf("%d\n",rez);
}
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
citire();
calcul();
return 0;
}