Pagini recente » Cod sursa (job #380567) | Cod sursa (job #566642) | Cod sursa (job #2161744) | Cod sursa (job #779561) | Cod sursa (job #2225795)
#include <cstdio>
#include <map>
using namespace std;
char s[10000001],cc[25];
map<int,int> m;
int main()
{
FILE *fin=fopen ("abc2.in","r");
FILE *fout=fopen ("abc2.out","w");
int i,l;
long long nr,p3,sol;
char c;
fgets (s,10000000,fin);
fgets (cc,25,fin);
while (1){
nr=0;
i=0;
while (cc[i]!='\n'){
nr=nr*3+(cc[i]-'a');
i++;
}
l=i;
m[nr]=1; // exista cuvantul nr
c=fgetc (fin);
fgets (cc+1,25,fin);
if (c!='a' && c!='b' && c!='c')
break;
cc[0]=c;
}
p3=1;
for (i=1;i<l;i++)
p3*=3;
nr=0;
sol=0;
for (i=0;i<l;i++){
if (s[i]=='\n')
break;
nr=nr*3+(s[i]-'a');
}
sol+=m[nr];
for (i=l;s[i]!='\n';i++){
nr=nr-p3*(s[i-l]-'a');
nr=nr*3+(s[i]-'a');
sol+=m[nr];
}
fprintf (fout,"%lld",sol);
return 0;
}