Pagini recente » Cod sursa (job #1502891) | Cod sursa (job #1371737) | Cod sursa (job #1082885) | Cod sursa (job #986087) | Cod sursa (job #1517526)
#include<iostream>
#include<fstream>
#include<cstdio>
#include<cstring>
#define C (*s-'a')
using namespace std;
FILE*si=fopen("trie.in","r");
//ifstream si("barbar.in");
ofstream so("trie.out");
struct trie
{
int cont,nrfii;
trie* v[26];
trie()
{
cont=0;
nrfii=0;
memset(v,0,sizeof(v));
}
};
trie *t=new trie;
void ins(trie *nod,char *s)
{
if(*s=='\n')
{
nod->cont++;
return;
}
if(nod->v[C]==0)
{
nod->v[C]=new trie;
nod->nrfii++;
}
ins(nod->v[C],s+1);
}
bool del(trie* nod,char *s)
{
if(*s=='\n')
{
nod->cont--;
}
else
if(del(nod->v[C],s+1))
{
nod->v[C]=0;
nod->nrfii--;
}
if(nod->cont==0&&nod->nrfii==0&&nod!=t)
{
delete nod;
return true;
}
return false;
}
int apar(trie*nod,char *s)
{
if(*s=='\n')
return nod->cont;
if(nod->v[C])
return apar(nod->v[C],s+1);
return 0;
}
int pref(trie*nod,char*s,int k)
{
if(*s=='\n'||nod->v[C]==0)
return k;
pref(nod->v[C],s+1,k+1);
}
int main()
{
char lin[32];
fgets(lin,32,si);
while(!feof(si))
{
switch(lin[0])
{
case '0':ins(t,lin+2); break;
case '1':del(t,lin+2); break;
case '2':so<<apar(t,lin+2)<<'\n'; break;
case '3':so<<pref(t,lin+2,0)<<'\n'; break;
}
fgets(lin,32,si);
}
so.close();
//si.close();
return 0;
}