Pagini recente » Cod sursa (job #587451) | Cod sursa (job #2649383) | Cod sursa (job #2669557) | Cod sursa (job #405638) | Cod sursa (job #724165)
Cod sursa(job #724165)
#include <cstdio>
#include <fstream>
#include <string.h>
#define inn "trie.in"
#define outt "trie.out"
using namespace std;
struct nod
{
nod *a[26];
int val;
int grad;
}primul;
void stergere();
void adaugare();
int parcurgere();
int prefix();
ifstream in(inn);
ofstream out(outt);
int main()
{
int act;
while(in>>act)
{
if(act==0)
adaugare();
else if(act==1)
stergere();
else if(act==2)
out<<parcurgere()<<"\n";
else if(act==3)
out<<prefix()<<"\n";
}
}
void adaugare()
{
nod *no,*curent;
char t[22];
int i,tempo;
curent=&primul;
in>>t;
int lung=strlen(t);
for(i=0;i<lung;++i)
{
tempo=t[i]-'a';
if(!(curent->a[tempo]))
{
no=new nod;
curent->a[tempo]=no;
curent->grad++;
}
curent=curent->a[tempo];
}
curent->val++;
}
int parcurgere()
{
int i;
nod *curent;
curent=&primul;
char t[22];
bool ok=1;
int lung;
in>>t;
lung=strlen(t);
int tempo;
for(i=0;i<lung;i++)
{
tempo=t[i]-'a';
if( !( curent->a[tempo] ) )
{
return 0;
}
curent=curent->a[tempo] ;
}
return curent->val;
}
int prefix()
{
nod *curent;
curent=&primul;
char t[22];
bool ok=1;
int lung;
int i;
in>>t;
lung=strlen(t);
for(i=0;i<lung;i++)
{
int tempo=t[i]-'a';
if( !( curent->a[tempo] ) )
{
if(i)
return i;
else
return i;
}
curent=curent->a [tempo] ;
}
return i;
}
void stergere()
{
nod *no,*curent,*ant;
curent=&primul;
ant=&primul;
char t[22];
int i,tempo=0,tempoant;
in>>t;
int lung=strlen(t);
for(i=0;i<lung;++i)
{
ant=curent;
tempo=t[i]-'a';
tempoant=tempo;
curent=curent->a[tempo];
}
curent->val--;
if(!(curent->val) && !(curent->grad))
{
ant->a[tempoant]=NULL;
delete curent;
ant->grad--;
}
int z=2;
}