Pagini recente » Cod sursa (job #780642) | Cod sursa (job #2115611) | Cod sursa (job #2463431) | Cod sursa (job #1190298) | Cod sursa (job #98357)
Cod sursa(job #98357)
#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;
}