Cod sursa(job #2009918)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 11 august 2017 11:24:48
Problema Abc2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define MOD 13831
#define uint unsigned int
using namespace std;
ifstream f("abc2.in");
ofstream g("abc2.out");
char s[10000005],cuv[25];
vector <uint> v[13831];
int clen,slen;

bool Cnt(uint x)
{  int lin = x % MOD, i;

   for(i = 0; i < v[lin].size(); i++)
      if (v[lin][i] == x)
         return 1;

   return 0;
}

void Ins(uint x)
{   int lin = x % MOD, i;

    if (Cnt(x))
       return;

    v[lin].push_back(x);
}
int main()
{ uint i, pw, val, sol = 0;
    f >> s;

    while(!f.eof())
    { f >> cuv;
        pw = 1;
        val = 0;
        clen = strlen(cuv);

        for(i = 0; i < clen; i++)
        {  val += (cuv[i] - 'a') * pw;
           pw *= 3;
        }

       if (!f.eof()) Ins(val);
    }
    slen = strlen(s);
    pw = 1;
    val = 0;
    for(i = 0; i < slen; i++)
    {
      if (i < clen)
      {  val += (s[i] - 'a') * pw;
         pw *= 3;
      }
      else
      {  val /= 3;
         val += (s[i] - 'a') * pw;
      }

      if (i == clen-1)
        pw/=3;

      if (i >= clen-1 && Cnt(val))
            sol++;
    }

    g << sol;
    return 0;
}