Pagini recente » Cod sursa (job #119237) | Cod sursa (job #2496904) | Calibrare limite de timp | Cod sursa (job #2699013) | Cod sursa (job #1652706)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream in("abc2.in");
ofstream out("abc2.out");
#define mod1 66013
#define mod2 56967
#define ab(x) (x-'a'+2)
#define pb push_back
#define mp make_pair
int c1,c2;
char s[10000001],x[22];
vector< vector< pair<int,int> > > h(mod1);
void code(int x,int y,char s[])
{
c1=c2=1;
for(int i=x;i<=y;i++)
{
c1=(c1*1LL*ab(s[i]))%mod1;
c2=(c2*1LL*ab(s[i]))%mod2;
}
}
void ins()
{
for(int i=0;i<(int)h[c1].size();i++)
if(h[c1][i].first==c2)
{
h[c1][i].second++;
return;
}
h[c1].pb(mp(c2,1));
}
int cnt()
{
for(int i=0;i<(int)h[c1].size();i++)
if(h[c1][i].first==c2)
return h[c1][i].second;
return 0;
}
int main()
{
in>>s;
int n=strlen(s);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
code(i,j,s);
ins();
}
int sol=0;
while(in>>x)
{
code(0,strlen(x),x);
sol+=cnt();
}
out<<sol<<'\n';
return 0;
}