Cod sursa(job #1309391)

Utilizator serban_ioan97Ciofu Serban serban_ioan97 Data 5 ianuarie 2015 18:37:44
Problema Abc2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <string>
#include <vector>
#define pb push_back
#define mod 666013
#define un unsigned

using namespace std;

ifstream f("abc2.in");
ofstream g("abc2.out");

vector <un int> kush[mod];
string s, ss;
int n, word_number, i;

void insert_value(un int x)
{
    int list=x%mod;
    vector<un int>::iterator it;

    for(it=kush[list].begin(); it!=kush[list].end(); ++it)
    if(*it==x) return;

    kush[list].pb(x);
}
inline bool find_value(un int x)
{
    int list=x%mod;
    vector<un int>::iterator it;

    for(it=kush[list].begin(); it!=kush[list].end(); ++it)
    if(*it==x) return true;

    return false;
}


void read()
{
    getline(f, s);

    for(ss; getline(f,ss); )
    {
        n=ss.size();
        un int x=0 ;
        for(i=0; i<n; ++i) x=x*3+ss[i]-'a';
        insert_value(x);
    }
}

void solve()
{
    int len=s.size();
    un int x=0, pow=1;

    for(i=0; i<n; ++i)
    {
        x=x*3+s[i]-'a';
        pow=pow*3;
    }
    pow/=3;
    word_number+=find_value(x);
    for(i=n; i<len; ++i)
    {
        x-=pow*(s[i-n]-'a');
        x=x*3+s[i]-'a';
        word_number+=find_value(x);
    }
}
int main()
{
    read();
    solve();
    g<<word_number<<"\n";
    return 0;
}