Cod sursa(job #2474461)

Utilizator CiboAndreiAndrei Cibo CiboAndrei Data 15 octombrie 2019 11:39:17
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;

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

const int dim1 = 7001, dim2 = 10000002, dim3 = 22;

int main()
{
    vector <long long> v0[dim1];

    long long nrgas, nr = 0;
    long long p3[dim3];
    char v[dim2], cuv[dim3];

    int i, j, l, rest;

    p3[0] = 1;
    for(i = 1; i < dim3; ++i)
        p3[i] = p3[i - 1] * 3;

    f >> v;

    f >> cuv;
    l = strlen(cuv);

    do{
        nr = 0;

        for(i = 0; cuv[i]; ++i){
            nr += p3[i] * (cuv[i] - 'a');
        }

        rest = nr % dim1;

        for(i = 0; i < v0[rest].size(); ++i){
            if(v0[rest].at(i) == nr){
                break;
            }
        }

        if(i == v0[rest].size())
            v0[rest].push_back(nr);

    }while(f >> cuv);

    nr = 0;
    for(i = 0; i < l; ++i){
        nr += p3[i] * (v[i] - 'a');
    }

    for(j = l; v[j]; ++j){
        rest = nr % dim1;

        for(i = 0; i < v0[rest].size(); ++i){
            if(v0[rest].at(i) == nr){
                ++nrgas;
                break;
            }
        }

        nr /= 3;
        nr += p3[l - 1] * (v[j] - 'a');
    }

    rest = nr % dim1;
    for(i = 0; i < v0[rest].size(); ++i){
        if(v0[rest].at(i) == nr){
            ++nrgas;
            break;
        }
    }

    g << nrgas;

    return 0;
}