Pagini recente » Cod sursa (job #2001619) | Cod sursa (job #668818) | Cod sursa (job #1573450) | Cod sursa (job #2099894) | Cod sursa (job #2474420)
#include <bits/stdc++.h>
using namespace std;
ofstream g("abc2.out");
ifstream f("abc2.in");
const int mod=666013,mod1=19017;
long long p3[35],sol;
int n;
char v[10000205],s[35];
char x;
vector<int>M[mod],N[mod1];
void inser(int x)
{
int poz=x%mod;
bool ok=1;
for(int i=0;i<M[poz].size();i++)
if(M[poz][i]==x) ok=0;
if(ok==1) M[poz].push_back(x);
ok=1;
int poz1=x%mod1;
for(int i=0;i<N[poz1].size();i++)
if(N[poz1][i]==x) ok=0;
if(ok==1) N[poz1].push_back(x);
}
int query(int x)
{
int poz=x%mod,u=0,u1=0,poz1=x%mod1;
for(int i=0;i<M[poz].size();i++)
if(M[poz][i]==x)
u++;
for(int i=0;i<N[poz1].size();i++)
if(N[poz1][i]==x)
u1++;
u=min(u,u1);
return u;
}
int main()
{
p3[0]=1;
for(int i=1;i<=21;i++)
p3[i]=p3[i-1]*3;
f>>v;
for(int i=0;v[i];i++)
{
if(v[i]=='a') v[i]='0';
else if(v[i]=='b') v[i]='1';
else if(v[i]=='c') v[i]='2';
}
int nr=0;
while(f>>s)
{
for(int i=0;s[i];i++)
{
nr+=(s[i]-'a')*p3[i];
}
inser(nr);
//g<<nr<<"\n";
nr=0;
n=strlen(s);
}
//g<<"\n";
nr=0;
for(int j=0;j<=n-1;j++)
nr+=(v[j]-'0')*p3[j];
int upl=strlen(v);
for(int j=n;j<upl;j++)
{
sol+=query(nr);
//g<<query(nr)<<" ";
//g<<nr<<"\n";
nr=nr/3;
nr+=(v[j]-'0')*p3[n-1];
}
g<<sol;
return 0;
}