Cod sursa(job #2296018)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 4 decembrie 2018 09:06:23
Problema Abc2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
#define mod 11083
vector <unsigned int> v[mod];
unsigned int verificare_candidati(unsigned int nr)
{
    unsigned int i,aux,dimensiune;
    aux=nr%mod;
    dimensiune=v[aux].size();
    for(i=0;i<dimensiune;i++)
    {
        if(v[aux][i]==nr)
        {
            return 1;
        }
    }
    return 0;
}
int main()
{
    ifstream fin("abc2.in");
    ofstream fout("abc2.out");
    string sir_initial,cuvant;
    unsigned int nr,p=1,nr_candidati=0,i;
    unsigned int lgcuv,lgsir;
    fin>>sir_initial;
    lgsir=sir_initial.size();
    fin>>cuvant;
    lgcuv=cuvant.size();
    nr=0;
    for(i=0;i<lgcuv;i++)
    {
        nr*=3;
        nr+=(cuvant[i]-'a');
    }
    v[nr%mod].push_back(nr);
    while(!fin.eof())
    {
        fin>>cuvant;
        nr=0;
        for(i=0;i<lgcuv;i++)
        {
             nr*=3;
             nr+=(cuvant[i]-'a');
        }
        v[nr%mod].push_back(nr);
    }
    nr=0;
    for(i=0;i<lgcuv;i++)
    {
        p*=3;
        nr*=3;
        nr+=(sir_initial[i]-'a');
    }
    p/=3;
    if(verificare_candidati(nr)==1)
    {
          nr_candidati++;
    }
    for(i=lgcuv;i<lgsir;i++)
    {
        nr-=p*(sir_initial[i-lgcuv]-'a');
        nr*=3;
        nr+=(sir_initial[i]-'a');
        if(verificare_candidati(nr)==1)
        {
            nr_candidati++;
        }
    }
    fout<<nr_candidati;
    fin.close();
    fout.close();
    return 0;
}