Cod sursa(job #1886449)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 20 februarie 2017 21:35:28
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <unordered_map>
#define MAXT 10000050
#define MAXN 25

using namespace std;

char text[MAXT], cuv[MAXN];
int n, sol;
unordered_map<long long, int> um;

void add()
{
    n = strlen(cuv) - 2;
    long long fact = 1;
    long long nr = 0;
    for (int i = n; i >= 0; i--) {
        nr += fact*(cuv[i]-'a'+1);
        fact += fact<<1;
    }
    um[nr]++;
}

void solve()
{
    long long fact = 1;
    long long nr = 0;
    for (int i = strlen(text)-1, t = 0; i >= 0; i--, t++) {
        if (t <= n) {
            nr += fact*(text[i]-'a'+1);
            fact *= ((t<n)<<1) | 1;
        }
        else {
            nr -= (text[i+n+1]-'a'+1);
            nr /= 3;
            nr += fact*(text[i]-'a'+1);
        }
        if (um.find(nr) != um.end())
            sol++;
    }
    printf("%d", sol);
}

int main()
{
    freopen("abc2.in", "r", stdin);
    freopen("abc2.out", "w", stdout);

    gets(text);
    fgets(cuv, MAXN+1, stdin);
    while (!feof(stdin)) {
        add();
        fgets(cuv, MAXN+1, stdin);
    }
    //solve();

    return 0;
}