Pagini recente » Cod sursa (job #64606) | Cod sursa (job #551016) | Cod sursa (job #1603448) | Cod sursa (job #2268758) | Cod sursa (job #2239800)
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#define CH *ch-'a'
using namespace std;
int i,j,n;
char s[35],*p;
struct trie
{
int nrf,cnt;
trie *fii[30]{},*t;
trie ()
{
nrf=cnt=0;
memset(fii, 0, sizeof(fii));
}
};
trie *T = new trie;
void ins(trie *nd,char *ch)
{
if(*ch=='\n')
{ nd->cnt++; return; }
nd->fii[CH] = new trie;
nd->fii[CH]->t=nd;
nd->nrf++;
ins(nd->fii[CH], ch+1);
}
void del(trie *nd,char *ch)
{
if(ch<s+2) return;
if(nd->nrf==0 && nd->cnt==0)
{
trie *g = nd;
nd->t->fii[CH]=0;
nd->t->nrf--;
delete nd;
del(g->t, ch-1);
}
}
void prefx(trie *nd,char *ch)
{
if(*ch=='\n' || nd->fii[CH]==0)
{
if(s[0]=='0') ins(nd, ch);
if(s[0]=='1') nd->cnt--, del(nd, ch-1);
if(s[0]=='2') printf("%d\n",((*ch=='\n')?(nd->cnt):0));
if(s[0]=='3') printf("%d\n",int(ch-s-2));
return;
}
prefx(nd->fii[CH], ch+1);
}
int main() {
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
while(fgets(s, 33, stdin)){
prefx(T, s+2);
}
return 0;
}