Cod sursa(job #3141047)

Utilizator TeodoraMaria123Serban Teodora Maria TeodoraMaria123 Data 11 iulie 2023 22:44:56
Problema Abc2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

const unsigned int base = 3;

unordered_map <unsigned int, int> mp;

void mask(string s)
{
    unsigned int nr = 0;
    for(int i = 0; i < s.size(); i ++)
        nr = nr * base + s[i] - 'a';
//    cout << nr << "\n";
    mp[nr] = 1;
}

int main()
{
    ios_base :: sync_with_stdio(0);
    cin.tie(0);

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

    string s;
    cin >> s;

    int len, cnt = 0;
    string cuv;
    while(cin >> cuv)
    {
        len = cuv.size();
        mask(cuv);
    }

    int basePow = 1;
    for(int i = 1; i < len; i ++)
        basePow *= base;

//    cout << basePow << "\n";

    unsigned int nr = 0;
    for(int i = 0; i < len; i ++)
        nr = nr * base + s[i] - 'a';
    if(mp.find(nr) != mp.end())
            cnt ++;

//    cout << nr << "\n";
    for(int i = len; i < s.size(); i ++)
    {
        nr -= (s[i - len] - 'a') * basePow;
//        cout << nr << " ";
        nr = nr * base + s[i] - 'a';
//        cout << nr << "\n";
        if(mp.find(nr) != mp.end())
            cnt ++;
    }

    cout << cnt;
    return 0;
}