Cod sursa(job #98357)

Utilizator mgntMarius B mgnt Data 10 noiembrie 2007 12:49:14
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.73 kb
#include <iostream>
#include <fstream>
using namespace std;

int const MaxT = 10000000;
int const MaxD = 50000;
int const MaxC = 20;

static char Text   [1+MaxT];
static char Cuvant [1+MaxC];

class Copac {
public:
   Copac() : pA(0), pB(0), pC(0) {}
   ~Copac() {
    if (pA) delete pA;
    if (pB) delete pB;
    if (pC) delete pC;
   }
  void Adauga(char * cuvant) {
    if('a' == cuvant[0]) {
      if (0 == pA) pA = new Copac;
      pA->Adauga(& cuvant[1]);
      return;
    }
    if('b' == cuvant[0]) {
      if (0 == pB) pB = new Copac;
      pB->Adauga(& cuvant[1]);
      return;
    }
    if('c' == cuvant[0]) {
      if (0 == pC) pC = new Copac;
      pC->Adauga(& cuvant[1]);
      return;
    }
  }
  bool Cauta(char * cuvant) {
    if('a' == cuvant[0]) {
      if(0 == pA) return false;
      return pA->Cauta(& cuvant[1]);
    }
    if('b' == cuvant[0]) {
      if(0 == pB) return false;
      return pB->Cauta(& cuvant[1]);
    }
    if('c' == cuvant[0]) {
      if(0 == pC) return false;
      return pC->Cauta(& cuvant[1]);
    }
    return true;
  }
private:
  Copac * pA, * pB, * pC;
};


int main () {
  int i, n, m, cont;
  char ch;
  ifstream sin("abc2.in");
  i = 0;
  while(true) {
    sin . get ( Text[i] );
    if('\n' == Text[i]) break;
    ++ i;
  }
  n = i;
  Copac cop;
  m = 0;
  i = 0;
  while(true) {
    sin .get (Cuvant[i]);
    if(! sin) break;
    if('\n' == Cuvant [i]) {
      cop.Adauga(Cuvant);
      if(0 == m) m = i;
      i = 0;
      continue;
    }
    ++ i;
  }
  if(0 != i) {
    cop.Adauga(Cuvant);
    if(0 == m) m = i;
  }
  cont = 0;
  if(0 != m) {
    for(i = n-m; i >= 0; i --) {
      Text[i+m] = '\n';
      if(cop.Cauta(&Text[i])) ++ cont;
    }
  }
  ofstream sout("abc2.out");
  sout << cont << endl;
  return 0;
}