Pagini recente » Cod sursa (job #3148715) | Cod sursa (job #1664313) | Cod sursa (job #2095314) | Cod sursa (job #1286583) | Cod sursa (job #1468104)
#include <fstream>
#include <map>
#define LMAX 21
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int n,op;
char S[LMAX];
struct trie{
int ap;
map<int,trie*>son;
trie(){
ap=0;
}
};
trie *Root=new trie;
inline int cautare(trie *nod,char *s)
{
int nivel=0,ma=0,numar;
while (*s)
{
if (nod->son[*s-'a']==0 && !op)
nod->son[*s-'a']=new trie;
if (nod->son[*s-'a'])
nod=nod->son[*s-'a'];
else break;
if (op<=1)
nod->ap+=(!op?1:-1);
if (op==3 && nod->ap)ma=nivel+1;
s++;
nivel++;
}
if (op==3)return ma;
if (op==2)
{
if (*s)return 0;
numar=nod->ap;
for (int i=0;i<=25;i++)
if (nod->son[i] && nod!=Root)numar-=nod->son[i]->ap;
return numar;
}
return 0;
}
int main()
{
while (f>>op)
{
f>>S;
int val=cautare(Root,S);
if (op==2 || op==3)g<<val<<'\n';
}
f.close();
g.close();
}