Cod sursa(job #1487977)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 17 septembrie 2015 18:52:47
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#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;
}