Pagini recente » Cod sursa (job #1897965) | Cod sursa (job #1213485) | Cod sursa (job #2499489) | Cod sursa (job #2456070) | Cod sursa (job #770477)
Cod sursa(job #770477)
#include <fstream>
#include <cstring>
using namespace std;
struct Trie
{
int fii,ap;
Trie *fiu[26];
Trie()
{
fii=ap=0;
memset(fiu,0,sizeof(fiu));
}
};
ifstream in("trie.in");
ofstream out("trie.out");
Trie *A=new Trie;
char a[50];
int ltt=0,ok=1;
void ins(Trie *nod,char *s)
{
if(*s=='\n')
{
nod->ap++;
return;
}
if(nod->fiu[*s-'a']==0)
{
nod->fiu[*s-'a']=new Trie;
nod->fii++;
}
ins(nod->fiu[*s-'a'],s+1);
}
void del(Trie *nod,char *s)
{
if(*s=='\n')
{
nod->ap--;
//ok=0;
return;
}
if(nod->fiu[*s-'a'])
{
del(nod->fiu[*s-'a'],s+1);
}
if(ok)
{
if(nod->fii>1 || nod->ap>0)
{
nod->fiu[*s-'a']=0;
ok=0;
}
}
}
int doi(Trie *nod,char *s)
{
if(*s=='\n')
{
return nod->ap;
}
if(nod->fiu[*s-'a'])
{
return doi(nod->fiu[*s-'a'],s+1);
}
return 0;
}
int trei(Trie *nod,char *s,int lvl)
{
if(*s=='\n')
{
return lvl;
}
if(nod->fiu[*s-'a'])
{
return trei(nod->fiu[*s-'a'],s+1,lvl+1);
}
else
{
return lvl;
}
}
int main()
{
while(in.getline(a,49))
{
a[strlen(a)]='\n';
//out<<a;
if(a[0]=='0')
{
ins(A,a+2);
}
else
if(a[0]=='1')
{
ok=1;
del(A,a+2);
}
else
if(a[0]=='2')
{
out<<doi(A,a+2)<<'\n';
}
else
if(a[0]=='3')
{
out<<trei(A,a+2,0)<<'\n';
}
memset(a,'\0',sizeof(a));
}
out.close();
return 0;
}