Cod sursa(job #2474063)

Utilizator alex_bb8Banilean Alexandru-Ioan alex_bb8 Data 14 octombrie 2019 18:03:18
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

ofstream g("abc2.out");
FILE *pFile=freopen("abc2.in","r",stdin);

const int dim=90000,mod=666013,mod1=9017;
long long p3[25],sol;
int n;
char v[10000001],s[22];
char x;

vector<int>M[mod];

void inser(int x)
{
  int poz=x%mod;

  M[poz].push_back(x);

}




int query(int x)
{
  int poz=x%mod,u=0;
  for(int i=0;i<M[poz].size();i++)
   if(M[poz][i]==x) {u++;M[poz].erase(M[poz].begin()+i);}
  return u;
}


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

    int i=0;

    while(x!='\n')
    {
     x=fgetc(pFile);
     if(isalpha(x))
     {
         if(x=='a') v[i]='0';
     else if(x=='b') v[i]='1';
     else if(x=='c') v[i]='2';

      i++;
     }
    }

    int nr=0,j=0;

    while(x!=EOF)
    {
     x=fgetc(pFile);
     if(x=='\n')
     {n=j;inser(nr);nr=0;j=0;}
     else
     nr+=(x-'a')*p3[j++];

    }

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


    for(int j=1;j<i;j++)
    {
     sol+=query(nr);
     //g<<query(nr)<<"\n";
     //g<<nr<<"\n";
     nr=nr/3;
     nr+=(v[j]-'0')*p3[n-1];
    }

    g<<sol;
    return 0;
}