Cod sursa(job #2474474)

Utilizator alex_bb8Banilean Alexandru-Ioan alex_bb8 Data 15 octombrie 2019 11:51:44
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;

ofstream g("abc2.out");
ifstream f("abc2.in");

const int mod=666013;
vector<long long> M[mod];
bool okmod[mod];
string v,s;

int main()
{


    long long p3[35],sol=0;
    int n;

    p3[0]=1;
    for(int i=1;i<=20;i++)
     p3[i]=p3[i-1]*3;

    f>>v;

    long long nr=0;

    while(f>>s)
    {
     for(int i=0;s[i];i++)
      nr+=(s[i]-'a')*p3[i];

    int poz=nr%mod;
    bool ok=1;
    for(int i=0;i<M[poz].size();i++)
     if(M[poz][i]==nr) ok=0;
    if(ok==1) M[poz].push_back(nr);

     //g<<nr<<"\n";
     nr=0;
     n=s.size();
    }

    //g<<"\n";
    //for(int i=0;i<M[48].size();i++) g<<M[48][i]<<" ";
    nr=0;

    for(int j=0;j<=n-1;j++)
     nr+=(v[j]-'a')*p3[j];

    int upl=v.size();

    for(int j=n;j<upl;j++)
    {
     int poz=nr%mod;
     if(!okmod[poz]) sort(M[poz].begin(),M[poz].end()),okmod[poz]=1;
     if(binary_search(M[poz].begin(),M[poz].end(),nr))
      sol++;
     //g<<query(nr)<<" ";
     //g<<nr<<"\n";
     nr=nr/3;
     nr+=(v[j]-'a')*p3[n-1];
    }
    //g<<nr<<"\n";
    int poz=nr%mod;
     if(!okmod[poz]) sort(M[poz].begin(),M[poz].end()),okmod[poz]=1;
     if(binary_search(M[poz].begin(),M[poz].end(),nr))
      sol++;


    g<<sol;
    return 0;
}