Pagini recente » Cod sursa (job #2836709) | Cod sursa (job #1079422) | Cod sursa (job #978520) | Cod sursa (job #2767775) | Cod sursa (job #2628942)
//#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
ifstream cin ("trie.in");
ofstream cout ("trie.out");
struct adat
{
int sz,veg;
adat* kov[26];
};
adat* start;
string k;
void betesz (adat*&s, int poz)
{
int p,i;
p=int(k[poz]-'a');
if(s==NULL)
{
s=new adat;
s->sz=0;
s->veg=0;
for(i=0;i<=25;++i) s->kov[i]=NULL;
if(k.length()==poz) s->veg++;
else
{
s->sz++;
betesz(s->kov[p],poz+1);
}
}
else
{
if(k.length()==poz) s->veg++;
else
{
s->sz++;
betesz(s->kov[p],poz+1);
}
}
}
int torol (adat*&s,int poz)
{
int p=k[poz]-'a',i;
if(s!=NULL)
{
s->sz--;
if(s->sz==0)
{
for(i=0;i<=25;++i)
{
delete s->kov[i];
s->kov[i]=NULL;
}
}
else
if(k.length()==poz)
{
s->veg--;
if(s->veg==0)
{
delete s;
s=NULL;
}
}
else torol(s->kov[p],poz+1);
}
}
/*
int kiir (adat*&s)
{
adat*p=s;
while (p)
{
cout<<p->x<<" ";
p=p->kov;
}
}*/
int szo(adat*s,int poz)
{
if(k.length()==poz) return s->veg;
else return szo(s->kov[k[poz]-'a'],poz+1);
}
int prefix(adat*s,int poz)
{
int p=k[poz]-'a';
if(s->kov[p]==NULL) return 0;
else return 1+prefix(s->kov[k[poz]-'a'],poz+1);
}
long long i,n,a;
int main()
{
int db=0;
start=NULL;
while (cin>>a>>k)
{
if(a==0) betesz(start,0);
if(a==1) torol(start,0);
if(a==2)
cout<<szo(start,0)<<"\n";
if(a==3) cout<<prefix(start,0)<<"\n";
}
//torolel(start);
//kiir(start);
return 0;
}