Pagini recente » Cod sursa (job #407233) | Cod sursa (job #1258865) | Cod sursa (job #337897) | Cod sursa (job #147411) | Cod sursa (job #3198483)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct tNod
{
tNod* fiu[26];
int cnt;/// din cate cuvinte face parte nodul
int cuv;/// cate cuvinte se termina in acel nod
tNod()
{
for(int i=0;i<26;i++)
fiu[i]=NULL;
cnt=cuv=0;
}
};
tNod *root;
int op;
char w[25];
int main()
{
root=new tNod;
while(f>>op)
{
f>>w;
if(op==0)
{
char *p=w;
tNod *q=root;
while(*p)
{
int c=*p-'a';
if(q->fiu[c]==NULL)
q->fiu[c]=new tNod;
q=q->fiu[c];
q->cnt++;
p++;
}
q->cuv++;
}
else if(op==1)
{
char *p=w;
tNod *q=root;
while(*p)
{
int c=*p-'a';
q=q->fiu[c];
q->cnt--;
p++;
}
q->cuv--;
}
else if(op==2)
{
char *p=w;
tNod *q=root;
while(*p)
{
int c=*p-'a';
if(q->fiu[c]==NULL)break;
if(q->fiu[c]->cnt==0)break;
q=q->fiu[c];
p++;
}
if(*p==0)
g<<q->cuv<<'\n';
else
g<<"0\n";
}
else
{
char *p=w;
tNod *q=root;
int lg=0;
while(*p)
{
int c=*p-'a';
if(q->fiu[c]==NULL)break;
if(q->fiu[c]->cnt==0)break;
lg++;
q=q->fiu[c];
p++;
}
g<<lg<<'\n';
}
}
return 0;
}