Pagini recente » Cod sursa (job #1049971) | Cod sursa (job #77754) | Cod sursa (job #3224241) | Cod sursa (job #1084467) | Cod sursa (job #1070908)
#include <iostream>
#include <fstream>
using namespace std;
struct trie{
int nfii,val,exist;
trie *fii[26],*ant;
trie()
{
ant=NULL;
exist=0;
nfii=0;
val=0;
for (int i=0;i<26;i++)
fii[i]=NULL;
}
} *rad;
string s;
void query0()
{
trie *p;
p=rad;
p->exist++;
for (int i=2;i<s.size();i++)
{
if (p->fii[s[i]-'a']==NULL)
{
p->fii[s[i]-'a']=new(trie);
p->fii[s[i]-'a']->ant=p;
}
p=p->fii[s[i]-'a'];
p->exist++;
}
p->val++;
}
int query1(trie *p,int pos)
{
p->exist--;
if (pos==s.size())
p->val--;
else
if (query1(p->fii[s[pos]-'a'],pos+1)==0)
p->fii[s[pos]-'a']=NULL;
if (p->exist==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-1;
}
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;
}