Cod sursa(job #612682)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 9 septembrie 2011 16:02:49
Problema Abc2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<ext/hash_set>
#define MAX 10000010
using namespace std;
using namespace __gnu_cxx;

char x[MAX],cuv[21];
hash_set <unsigned int , hash<int> > h;
unsigned int l,n,sol,masc,p3=1;

inline unsigned int cod(char *y) {
    unsigned int i,sol = 0;

    for(i = 0; i<=l; ++i)
        sol = sol*3 + y[i] - 'a';

    return sol;
}

int main() {
    int i;

    freopen("abc2.in","r",stdin);
    freopen("abc2.out","w",stdout);

    fgets(x,MAX,stdin);
    n=strlen(x) - 2;

    fgets(cuv,22,stdin);
    l=strlen(cuv) - 2;
    h.insert(cod(cuv));

    for(h.insert(cod(cuv)); fgets(cuv,22,stdin); h.insert(cod(cuv)));

    for(i=0 ; i<l ; ++i) {

        masc=masc*3 + x[i] - 'a';

        p3*=3;
    }

    for(i=l ; i<=n; ++i) {

        masc=(masc % p3)*3 +x[i]-'a';

        sol+=h.count(masc);

    }

    printf("%d",sol);

    return 0;
}