Cod sursa(job #1309792)

Utilizator bogdanpaunFMI Paun Bogdan Gabriel bogdanpaun Data 6 ianuarie 2015 01:12:34
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

char text[10000099];
char cuvant[25];
int sol;
#define MOD 30011
vector<unsigned>h[MOD];

int cauta(unsigned int x)
{
    for(int i=0;i<h[x%MOD].size();i++)
    {
        if(h[x%MOD][i]==x)
        return 1;
    }
    return 0;
}

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

    scanf("%s", text);

    int l,x,p=1;
    while( !feof(stdin) ){
        scanf("%s",  cuvant);
        l = strlen(cuvant);
        x = 0;
        for(int i=0; i<l;++i)
            x = x*3 + cuvant[i] - 'a';
        h[x%MOD].push_back(x);
    }

    int len = strlen(text);
    x = 0;
    for(int i=0;i<l;++i){
        x = x*3 + text[i] - 'a';
        p *= 3;
    }

    p /= 3;
    sol += cauta(x);

    for( int i = l; i < len ; ++ i){
        x-=   ( text[i-l] - 'a' ) * p;
        x = x * 3 + text[i] - 'a';
        sol += cauta(x);
    }
    printf("%d",sol);
    return 0;
}