Cod sursa(job #2296800)

Utilizator mirunazMiruna Zavelca mirunaz Data 5 decembrie 2018 00:42:46
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
#include<cstring>
#include<unordered_map>

using namespace std;

int CalcMask(string s, int n)
{
    int p = 1, sum = 0;
    for(int i=n - 1; i>=0; i--) {
        sum += (s[i] - 'a')*p;
        p *= 3;
    }
    return sum;
}

int RenewMask(string s, int n, int start, int pk, int x)
{
    int aux = (s[start+n] - 'a') - (s[start] - 'a')*pk;
    return (aux + 3*x);
}

int main ()
{
    ifstream in("abc2.in");
    ofstream out("abc2.out");
    unordered_map <int, int> h;
    string sir, s;
    in >> sir;

    int n, pk=1;
    while(in >> s) {
        n = s.size();
        h[CalcMask(s, n)] ++;
    }

    int x = CalcMask(sir, n);
    for (int i = 0; i<n;++i){
        pk*=3;
    }
    //pk *= 3;

    int ct = 0;
    if(h[x] != 0) {
        ct ++;
    }

    int m = sir.size();
    for(int i=0; i<m-n-1; i++) {
        x = RenewMask(sir, n, i, pk, x);
        if(h[x] != 0) {
            ct ++;
        }
    }

    out << ct;
    return 0;
}