Pagini recente » Cod sursa (job #690115) | Cod sursa (job #3160389) | Cod sursa (job #2422682) | Cod sursa (job #2914426) | Cod sursa (job #2949267)
#include <fstream>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int t;
char s[30];
struct trie
{
int nr,val;
trie *a[27];
trie()
{
nr=val=0;
for(int i=0;i<27;i++)
a[i]=0;
}
};
trie *T= new trie;
void add(trie *nod, char *s)
{
if(!isalpha(*s))
{
nod->val++;
return;
}
int next=*s-'a';
if(!nod->a[next])
{
nod->nr++;
nod->a[next]=new trie;
}
add(nod->a[next],s+1);
}
void tipar(trie *nod, char *s)
{
int next=*s-'a';
if(!isalpha(*s))
{
g<<nod->val<<'\n';
return;
}
else
if(!nod->a[next])
{
g<<0<<'\n';
return;
}
else
tipar(nod->a[next],s+1);
}
void prefix (trie *nod, char *s, int l)
{
int next=*s-'a';
if(!isalpha(*s)||!nod->a[next])
{
g<<l<<'\n';
return;
}
prefix(nod->a[next],s+1,l+1);
}
bool stergere(trie *nod, char *s)
{
int next=*s-'a';
if(!isalpha(*s))
nod->val--;
else
if(stergere(nod->a[next],s+1))
{
nod->nr--;
nod->a[next]=0;
}
if(nod->nr==0&&nod->val==0&&nod!=T)
{
delete nod;
return 1;
}
else
return 0;
}
int main()
{
while(f>>t>>s)
{
if(t==0)
add(T,s);
else
if(t==2)
tipar(T,s);
else
if(t==1)
stergere(T,s);
else
prefix(T,s,0);
}
return 0;
}