Pagini recente » Cod sursa (job #2856783) | Cod sursa (job #1143414) | Cod sursa (job #2983146) | Cod sursa (job #353297) | Cod sursa (job #2455961)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nd{int ap;nd*n[26];}*R=new nd;
char a[21];
int v=1,n;
void adap(int i,nd*T)
{
if(i==n)
{
T->ap++;
}
else if(T->n[a[i]-'a']==NULL)
{
nd*K=new nd;
K->ap=0;T->n[a[i]-'a']=K;
for(int i=0;i<=25;++i)K->n[i]=NULL;
adap(i+1,T->n[a[i]-'a']);
}
else adap(i+1,T->n[a[i]-'a']);
}
int reap(int i,nd*T)
{
if(i==n)
{
T->ap--;
if(T->ap<=0)
{
delete(T);return 1;
}
return 0;
}
else
{
int q=reap(i+1,T->n[a[i]-'a']);
if(q==0)return q;
else
{
q=0;T->n[a[i]-'a']=NULL;
if(T->ap>0)return 0;
for(int i=0;i<=25;++i)if(T->n[i]!=NULL)return 0;
delete(T);return 1;
}
}
}
void cap(int i,nd*T)
{
if(i==n)
{
g<<T->ap<<'\n';
}
else if(T->n[a[i]-'a']==NULL)
{
g<<0<<'\n';
}
else cap(i+1,T->n[a[i]-'a']);
}
int pap(int i,nd*T)
{
if(i==n)
{
return i;
}
else if(T->n[a[i]-'a']==NULL)
{
return i;
}
else return pap(i+1,T->n[a[i]-'a']);
}
int main()
{
for(int i=0;i<=25;++i)R->n[i]=NULL;
while(f>>v)
{
f>>a;n=strlen(a);
switch(v)
{
case 0:adap(0,R);break;
case 1:reap(0,R);break;
case 2:cap(0,R);break;
case 3:g<<pap(0,R)<<'\n';break;
}
}
}