Pagini recente » Cod sursa (job #285354) | Cod sursa (job #148415) | Cod sursa (job #3156484) | Cod sursa (job #1676644) | Cod sursa (job #1487977)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
int nr,i,l,n,step,j;
long long z;
unsigned int a,M[50012];
char w[10000012],c[24];
void caut()
{
for(j=0,step=(1<<16);step;step>>=1)
if(j+step<=M[0]&&M[j+step]<=a) j+=step;
if(M[j]==a) nr++;
}
int main()
{
f>>(w+1);
l=strlen(w+1);
while(f>>(c+1))
{
n=strlen(c+1);
for(i=1,a=0;i<=n;++i) a=a*3+c[i]-'0';
M[++M[0]]=a;
}
sort(M+1,M+M[0]+1);
for(i=1,a=0,z=1;i<=n;++i) a=a*3+w[i]-'0',z*=3LL;
caut();
z/=3LL;
for(i=n+1;i<=l;++i) {a=a-(w[i-n]-'0')*z; a=a*3+w[i]-'0'; caut();}
g<<nr;
return 0;
}