Cod sursa(job #98200)

Utilizator VmanDuta Vlad Vman Data 10 noiembrie 2007 11:04:27
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 0.89 kb
#include <stdio.h>
#include <string.h>

#define Lmax 10000001
#define Lcmax 21
#define Dim 1048573

char s[Lmax],c[Lcmax];
int hash[Dim];
int L,Lc,tot,i,Nrmax;
long long nr;

int main()
{
 freopen("abc2.in","r",stdin);
 scanf("%s\n",&s);
 L=strlen(s);
 scanf("%s\n",&c);
 Lc=strlen(c);
 Nrmax=(1<<Lc);
 Nrmax=Nrmax*Nrmax-1;
 for (i=0;i<Lc;++i)
      nr=(nr<<2)+s[i]-'a';
 ++hash[nr % Dim];
 for (i=1;i<=L-Lc;++i)
     {
      nr=((nr<<2)&Nrmax)+s[i+Lc-1]-'a';
      ++hash[nr % Dim];
     }
 for (i=0,nr=0;i<Lc;++i)
     nr=(nr<<2)+c[i]-'a';
 tot+=hash[nr % Dim];
 hash[nr % Dim]=0;
 while (! feof(stdin))
       {
        scanf("%s\n",c);
        for (i=0,nr=0;i<Lc;++i)
            nr=(nr<<2)+c[i]-'a';
        tot+=hash[nr % Dim];
        hash[nr % Dim]=0;
       }
 freopen("abc2.out","w",stdout);
 printf("%d",tot);
 fclose(stdin);
 fclose(stdout);
 return 0;
}