Cod sursa(job #1168475)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 8 aprilie 2014 18:20:14
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <set>

int main()
{
  std::ifstream in("abc2.in");
  std::ofstream out("abc2.out");

  std::set<long long> codes[65536];
  const int MASK = (1 << 16) - 1;
  int codesize = -1;

  // Read in data.
  std::string text;
  std::getline(in, text);
  while (!in.eof()) {
    std::string line;
    std::getline(in, line);
    if (line.size()) {
      if (codesize == -1) {
        codesize = line.size();
      }
      long long code = 0;
      for (int i = 0; i < line.size(); ++i) {
        code = code * 3 + (line[i] - 'a');
      }
      codes[code & MASK].insert(code);
    }
  }

  // Compute max code = 3^{codesize}
  long long maxcode = 1;
  for (int i = 0; i < codesize; ++i) {
    maxcode = maxcode * 3;
  }

  return 0;

  int sol = 0;
  // Do the rest.
  long long code = 0;
  for (int i = 0; i < codesize - 1 && i < text.size(); ++i) {
    code = (code * 3 + text[i] - 'a') % maxcode;
  }

  for (int i = codesize - 1; i < text.size(); ++i) {
    code = (code * 3 + text[i] - 'a') % maxcode;
    if (codes[code & MASK].count(code)) {
      sol++;
    }
  }
  out << sol << std::endl;

  return 0;
}