Cod sursa(job #1775554)

Utilizator zacuscaAlex Iordache zacusca Data 10 octombrie 2016 15:59:30
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <string>
#include <vector>
#define MOD 666013

using namespace std;

ifstream fin ("abc2.in");
ofstream fout ("abc2.out");

vector < unsigned int > H[3 + MOD];
string S, W;

int Search(int value)
{
    int line = value % MOD;
    for (int i = 0; i < H[line].size(); ++ i)
        if (H[line][i] == value)
        {
            return 1;
        }
    return 0;
}

int main ()
{
    fin >> S;

    int N, M, sol = 0;
    unsigned int nr, pows[25];
    pows[0] = 1;
    for (int i = 1; i < 20; ++ i) pows[i] = 3 *  pows[i-1];
    while (fin >> W)
    {
        N = W.size(); nr = 0;
        for (int i = 0; i < N; ++ i) nr += pows[i] * (W[i] - 'a');
        if (!Search (nr))
        {
            H[nr % MOD].push_back (nr);
        }
    }
    nr = 0;
    M = S.size();
    for (int i = 0; i < N; ++ i) nr += pows[i] * (S[i] - 'a');
    sol += Search (nr);
    -- N;
    for (int i = N ; i < M; ++ i)
    {
        nr /= 3;
        nr += pows[N] * (S[i] - 'a');
        sol += Search (nr);
    }
    fout << sol << '\n';
    fout.close();
    return 0;
}