Cod sursa(job #1061120)

Utilizator cosmin_bobeicaCosmin Bobeica cosmin_bobeica Data 19 decembrie 2013 11:10:17
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<cstdio>
#include<iostream>
#include<vector>
#include<string>
using namespace std;
const int MOD=66013;
typedef vector<unsigned int> hesh;
typedef hesh::iterator hit;
hesh ht[MOD];
string text,cuv;
unsigned int lung, clung;

hit find(int x)
{

    for(hit i=ht[x%MOD].begin() ; i!=ht[x%MOD].end() ; i++)
        if(x==*i)
            return i;
    return ht[x%MOD].end();
}

int main()
{
    freopen("abc2.in","r",stdin);
    freopen("abc2.out","w",stdout);
    cin>>text;
    lung=text.length();
    cin>>cuv;
    clung=cuv.length();
    unsigned int nr,afis=0,p,l,j,i;
    hit fnd;
    while(!cin.eof())
    {
        nr=0;
        for(int i=0; i<clung; i++)
            nr=nr*3+cuv[i]-'a';

        fnd=find(nr);
        if(fnd==ht[nr%MOD].end())
            ht[nr%MOD].push_back(nr);
        cin>>cuv;
    }
    p=1;
    l=0;
    for(int i=0; i<clung-1; i++)
    {
        l=l*3+text[i]-'a';
        p=p*3;
    }
    for(int i=clung-1; i<lung; i++)
    {
        l=l%p;
        l=l*3+text[i]-'a';
        for(j=0; j<clung; j++)
            if(find(l)!=ht[l%MOD].end())
                break;
        if(j<clung)
            afis++;
    }
    cout<<afis;
    return 0;
}