Pagini recente » Cod sursa (job #500854) | Cod sursa (job #106836) | Cod sursa (job #2703749) | Cod sursa (job #2863792) | Cod sursa (job #2006422)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int k,x,n;
char s[22];
struct trie{int nr,val,next[26];}init;
vector <trie>v;
void Update(int P,int poz,int vl)
{v[P].nr+=vl;
if(!s[poz])
v[P].val+=vl;
else {x=s[poz]-'a';
if(!v[P].next[x])
{n++;
v.push_back(init);
v[P].next[x]=n;
}
Update(v[P].next[x],poz+1,vl);
}
}
int Query(int P,int poz)
{x=s[poz]-'a';
if(!s[poz])
return v[P].val;
else if(v[P].next[x])
return Query(v[P].next[x],poz+1);
else return 0;
}
int Multi()
{int i,P=0;
for(i=0;s[i]&&v[P].nr;i++)
{P=v[P].next[s[i]-'a'];
if(!P)
return i;
}
if(!v[P].nr)i--;
return i;
}
int main()
{int i;
init.nr=0;
init.val=0;
for(i=0;i<26;i++)
init.next[i]=0;
v.push_back(init);
while(fin>>k)
{fin>>s;
if(k==0)Update(0,0,1);
else if(k==1)Update(0,0,-1);
else if(k==2)fout<<Query(0,0)<<"\n";
else if(k==3)fout<<Multi()<<"\n";
}
}