Cod sursa(job #1309373)

Utilizator serban_ioan97Ciofu Serban serban_ioan97 Data 5 ianuarie 2015 18:24:44
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <vector>
#include <map>
#include <string>
#define pb push_back
#define mod 966013

using namespace std;

//map<int, int> kush;
vector<int> kush[mod];
ifstream f("abc2.in");
ofstream g("abc2.out");

string ss, s;
int qq, i, lenght;

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

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

    kush[list].pb(x);
}
inline int find_value(int x)
{
    int list=x%mod;
    vector<int>::iterator it;
    for(it=kush[list].begin(); it!=kush[list].end(); ++it)
    if(*it==x) return 1;

    return 0;
}
int main()
{
    getline(f, s);
    while(getline(f, ss))
    {
        lenght=ss.size();
        int x=0;
        for(i=0; i<lenght; ++i)
        x=x*3+ss[i]-'a';

        insert_value(x);
    }
    int len=lenght;
    lenght=s.size();
    int pow=1, x=0;

    for(i=0; i<len; ++i)
    {
        x=x*3+s[i]-'a';
        pow*=3;
    }

    long long word_number=0;
    pow/=3;
    word_number+=find_value(x);

    for(i=len; i<lenght; ++i)
    {
        x-=pow*(s[i-len]-'a');
        x=x*3+s[i]-'a';
        word_number+=find_value(x);
    }

    g<<word_number<<"\n";

    return 0;
}