Cod sursa(job #2831111)

Utilizator rapidu36Victor Manz rapidu36 Data 10 ianuarie 2022 20:46:53
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

const int NL = 3;

vector <unsigned int> v;

unsigned int codul(string &s)
{
    unsigned int cod = 0;
    for (auto c: s)
    {
        cod = cod * NL + (c - 'a');
    }
    return cod;
}

bool exista(unsigned int c)
{
    unsigned int st = 0, dr = v.size();
    while (st <= dr)
    {
        int m = (st + dr) / 2;
        if (v[m] == c)
        {
            return true;
        }
        if (c < v[m])
        {
            dr = m - 1;
        }
        else
        {
            st = m + 1;
        }
    }
    return false;
}

int main()
{
    ifstream in("abc2.in");
    ofstream out("abc2.out");
    string text, cuvant;
    in >> text;
    while (in >> cuvant)
    {
        v.push_back(codul(cuvant));
    }
    sort(v.begin(), v.end());
    int l = cuvant.length(), nr = 0;
    unsigned int p3 = 1;
    for (int i = 0; i < l - 1; i++)
    {
        p3 *= 3;
    }
    unsigned int cod = 0;
    for (int i = 0;  i < text.length(); i++)
    {
        if (i < l - 1)
        {
            cod = cod * NL + (text[i] - 'a');
        }
        else
        {
            cod = cod % p3 * NL + (text[i] - 'a');
            if (exista(cod))
            {
                nr++;
            }
        }
    }
    out << nr;
    in.close();
    in.close();
    return 0;
}