Pagini recente » Cod sursa (job #31056) | Autentificare | Cod sursa (job #2841343) | Cod sursa (job #2071464) | Cod sursa (job #1070940)
#include <iostream>
#include <fstream>
using namespace std;
struct trie{
int nfii,val;
trie *fii[26];
trie()
{
nfii=0;
val=0;
for (int i=0;i<26;i++)
fii[i]=NULL;
}
} *rad;
string s;
void query0()
{
trie *p;
p=rad;
for (int i=2;i<s.size();i++)
{
if (p->fii[s[i]-'a']==NULL)
{
p->fii[s[i]-'a']=new(trie);
p->nfii++;
}
p=p->fii[s[i]-'a'];
}
p->val++;
}
int query1(trie *p,int pos)
{
if (pos==s.size())
p->val--;
else
if (query1(p->fii[s[pos]-'a'],pos+1)==0)
{
p->fii[s[pos]-'a']=NULL;
p->nfii--;
}
if ((p->nfii==0)&&(p->val==0))
{
delete(p);
return 0;
}
else
return 1;
}
int query2()
{
trie *p;
p=rad;
for (int i=2;i<s.size();i++)
{
if (p->fii[s[i]-'a']==NULL)
return 0;
p=p->fii[s[i]-'a'];
}
return p->val;
}
int query3()
{
trie *p;
p=rad;
for (int i=2;i<s.size();i++)
{
if (p->fii[s[i]-'a']==NULL)
return i-2;
p=p->fii[s[i]-'a'];
}
int sz=s.size();
return sz-2;
}
int main(void)
{
ifstream f("trie.in");
ofstream g("trie.out");
rad=new(trie);
while (getline(f,s))
{
if (s[0]-'0'==0)
query0();
if (s[0]-'0'==1)
query1(rad,2);
if (s[0]-'0'==2)
g<<query2()<<'\n';
if (s[0]-'0'==3)
g<<query3()<<'\n';
}
return 0;
}