Pagini recente » Profil lary_kiss007 | Cod sursa (job #2680976) | Monitorul de evaluare | Cod sursa (job #1073259) | Cod sursa (job #2225800)
#include <cstdio>
#include <algorithm>
using namespace std;
char s[10000001],cc[25];
long long v[50001];
int elem;
int cautbin (long long x){
int st,dr,mid;
st=1;
dr=elem;
while (st<=dr){
mid=(st+dr)/2;
if (v[mid]==x)
return 1;
else if (v[mid]<x)
st=mid+1;
else dr=mid-1;
}
return 0;
}
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);
elem=0;
while (1){
nr=0;
i=0;
while (cc[i]!='\n'){
nr=nr*3+(cc[i]-'a');
i++;
}
v[++elem]=nr;
l=i;
c=fgetc (fin);
fgets (cc+1,25,fin);
if (c!='a' && c!='b' && c!='c')
break;
cc[0]=c;
}
sort (v+1,v+elem+1);
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+=cautbin(nr);
for (i=l;s[i]!='\n';i++){
nr=nr-p3*(s[i-l]-'a');
nr=nr*3+(s[i]-'a');
sol+=cautbin(nr);
}
fprintf (fout,"%lld",sol);
return 0;
}