Cod sursa(job #1483001)

Utilizator aaron72Armand Ioan Anusca Popa aaron72 Data 8 septembrie 2015 14:51:38
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>
#define nmax 10000010
#define mod 847129

using namespace std;

int n, m, sol;
unsigned int aux, p3[25];
char s[nmax], t[25];
vector <unsigned int> h[mod + 2];

bool Cautare(unsigned int x)
{
    unsigned int i;
    int r = x % mod;
    for (i = 0; i < h[r].size(); i++)
        if (h[r][i] == x) return true;
    return false;
}

int main()
{
    int i;
    ifstream fin("abc2.in");
    ofstream fout("abc2.out");
    fin >> (s + 1);
    n = strlen(s + 1);

    p3[1] = 1;
    for (i = 2; i <= 20; i++) p3[i] = p3[i - 1] * 3;

    while (fin >> (t + 1))
    {
        m = strlen(t + 1);
        aux = 0;
        for (i = 1; i <= m; i++)
            aux = aux + p3[i] * (t[i] - 97);
        if (!Cautare(aux))
            h[aux % mod].push_back(aux);
    }
    aux=0;
    for (i = 1; i <= m; i++) aux = aux + p3[i] * (s[i] - 97);
    sol += Cautare(aux);
    for (i = m + 1; i <= n; i++)
    {
        aux /= 3;
        aux = aux + p3[m] * (s[i]-97);
        sol += Cautare(aux);
    }
    fout << sol << "\n";
    fout.close();
    return 0;