Pagini recente » Cod sursa (job #1855890) | Cod sursa (job #1569333) | Cod sursa (job #1592196) | Cod sursa (job #2151089) | Cod sursa (job #2474474)
#include <bits/stdc++.h>
using namespace std;
ofstream g("abc2.out");
ifstream f("abc2.in");
const int mod=666013;
vector<long long> M[mod];
bool okmod[mod];
string v,s;
int main()
{
long long p3[35],sol=0;
int n;
p3[0]=1;
for(int i=1;i<=20;i++)
p3[i]=p3[i-1]*3;
f>>v;
long long nr=0;
while(f>>s)
{
for(int i=0;s[i];i++)
nr+=(s[i]-'a')*p3[i];
int poz=nr%mod;
bool ok=1;
for(int i=0;i<M[poz].size();i++)
if(M[poz][i]==nr) ok=0;
if(ok==1) M[poz].push_back(nr);
//g<<nr<<"\n";
nr=0;
n=s.size();
}
//g<<"\n";
//for(int i=0;i<M[48].size();i++) g<<M[48][i]<<" ";
nr=0;
for(int j=0;j<=n-1;j++)
nr+=(v[j]-'a')*p3[j];
int upl=v.size();
for(int j=n;j<upl;j++)
{
int poz=nr%mod;
if(!okmod[poz]) sort(M[poz].begin(),M[poz].end()),okmod[poz]=1;
if(binary_search(M[poz].begin(),M[poz].end(),nr))
sol++;
//g<<query(nr)<<" ";
//g<<nr<<"\n";
nr=nr/3;
nr+=(v[j]-'a')*p3[n-1];
}
//g<<nr<<"\n";
int poz=nr%mod;
if(!okmod[poz]) sort(M[poz].begin(),M[poz].end()),okmod[poz]=1;
if(binary_search(M[poz].begin(),M[poz].end(),nr))
sol++;
g<<sol;
return 0;
}