Cod sursa(job #2474483)

Utilizator DavidTurtureanCDavid Turturean DavidTurtureanC Data 15 octombrie 2019 11:59:30
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("abc2.in");
ofstream fout("abc2.out");
vector<unsigned int> v[100020];
int main()
{
    char s[10000005]={0};
    char c[22]={0};int i=0,auxmod=0,modi=100019,len=0,lens=0,gasit=0,j=0,dim=0; unsigned int nr=0,p=1; bool ok=0;
    //citire text
    fin.getline(s,10000002);
    fin.getline(c,22); len=strlen(c);
    for(i=nr=0;i<len;i++)nr=nr*3+(c[i]-'a');
    v[nr%modi].push_back(nr);
    while(fin.getline(c,22)){
            for(i=nr=0;i<len;i++)nr=nr*3+(c[i]-'a');
            auxmod=nr%modi;
            dim=v[auxmod].size();
            for(i=0,ok=0;i<dim;i++)if(v[auxmod].at(i)==nr){ok=1; break;}
            if(!ok)v[auxmod].push_back(nr);
    }
    for(i=2;i<=len;i++)p*=3; lens=strlen(s);
    for(i=nr=0;i<len;i++)nr=nr*3+(s[i]-'a');
    while(s[i]){
            auxmod=nr%modi;
            dim=v[auxmod].size();
            vector<unsigned int>::iterator it=v[auxmod].begin(); vector<unsigned int>::iterator it2=v[auxmod].end();
            while(it!=it2){
                     if(v[auxmod].at(it)==nr){ok=1;break;} it++;}
            if(ok)gasit++;
        nr=(nr-(s[i-len]-'a')*p)*3+(s[i]-'a');
        i++;
    }
    auxmod=nr%modi; dim=v[auxmod].size();
            for(j=0,ok=0;j<dim;j++)if(v[auxmod].at(j)==nr){ok=1;break;}
            if(ok)gasit++;
    fout<<gasit;

    return 0;
}