Cod sursa(job #2908985)

Utilizator andrei_srbnSerban Andrei andrei_srbn Data 7 iunie 2022 17:44:38
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <string>
using namespace std;
string sir,cuv;
unordered_map <unsigned int,int> my_map;

ifstream fin ("abc2.in");
ofstream fout ("abc2.out");

unsigned int putere( int n )
{
    unsigned int p = 1;
    for ( int i = 1; i <= n; i++)
        p*=3;

    return p;
}

int main()
{
    int i;
    fin >> sir;
    fin >> cuv;
    unsigned int s = 0 , lg = cuv.size() , put2 = putere(lg-1);

    for(i = 0; i < lg; i++)

    {
        s = s + ( sir[i] - 'a' ) * put2;
        put2 /= 3;
    }

    my_map[s] = 1;
    unsigned int put = putere(lg-1);

    for( i = lg; i < sir.size() ; i++)

    {
        s = ( s - (sir [i-lg] - 'a') * put ) *3 + ( sir[i] - 'a' );

        my_map[s]++;
    }

     s = 0;
     put2 = putere(lg-1);

    for( i = 0; i< lg; i++)
    {
        s = s + ( cuv[i] - 'a' ) * put2;
        put2 /= 3;
    }

    unsigned int rezultat = 0;

    if(my_map.find(s)!=my_map.end())
        {
            rezultat += my_map[s];
            my_map.erase(s);
        }

    while( fin >> cuv)
    {
        s = 0;
        put2 = putere(lg-1);

        for( i = 0; i< lg; i++)
        {
            s = s + ( cuv[i] - 'a' ) * put2;
            put2 /= 3;
        }

        if(my_map.find(s)!=my_map.end())
        {
            rezultat += my_map[s];
            my_map.erase(s);
        }
    }

    fout<<rezultat;

    return 0;
}