Pagini recente » Cod sursa (job #2508399) | Cod sursa (job #1850745) | Cod sursa (job #3205889) | Cod sursa (job #1933965) | Cod sursa (job #893354)
Cod sursa(job #893354)
#include <iostream>
#include <fstream>
#include <cstring>
#include <iomanip>
#define CH (*s-'a')
using namespace std;
char line[30];
struct trie{
int nrfii,cuv;
trie *fii[30];
trie()
{
nrfii=cuv=0;
memset(fii,0,sizeof(fii));
}
}*T;
void add(trie *nod,char *s)
{
if(*s=='\n')
{
nod->cuv++;
return;
}
if(nod->fii[*s-'a'] == 0)
{
nod->fii[CH]=new trie;
nod->nrfii++;
}
add(nod->fii[CH],s+1);
}
int del(trie *nod, char *s)
{
if(*s=='\n')
nod->cuv--;
else if(del(nod->fii[CH],s+1))
{
nod->fii[CH]=0;
nod->nrfii--;
}
if(nod->cuv == 0 && nod->nrfii ==0 && nod!=T)
{
delete nod; return 1;
}
return 0;
}
int que(trie *nod,char *s)
{
if(*s=='\n')
return nod->cuv;
if(nod->fii[CH])
return que(nod->fii[CH],s+1);
return 0;
}
int pre(trie *nod,char *s,int k)
{
if(*s=='\n' || nod->fii[CH]==0)
return k;
return pre(nod->fii[CH],s+1,k+1);
}
int main()
{
ifstream fin("trie.in");
ofstream fout("trie.out");
int n;
while(fin>>n)
{
fin.getline(line,25);
switch(n){
case 0: add(T,line+1);break;
case 1: del(T,line+1);break;
case 2: fout<<que(T,line+1);break;
case 3: fout<<pre(T,line+1,0);break;
}
}
return 0;
}