Pagini recente » Cod sursa (job #2719513) | Cod sursa (job #2326163) | Cod sursa (job #1317938) | Cod sursa (job #2338184) | Cod sursa (job #2964260)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int op;
struct Trie{
int cnt = 0;
int howmany = 0;
Trie* sons[26];
Trie()
{
for(int i = 0;i<26;i++)
{
sons[i] = NULL;
}
}
};
Trie* root = new Trie();
string str;
void Insert(string &w,Trie* node,int pos)
{
(*node).howmany++;
if(pos == w.size())
{
(*node).cnt++;
return;
}
if(node->sons[w[pos]-'a']==NULL)
{
node->sons[w[pos]-'a'] = new Trie();
}
Insert(w,node->sons[w[pos]-'a'],pos+1);
}
void Delete(string &w,Trie* node,int pos)
{
(*node).howmany--;
if(pos == w.size())
{
(*node).cnt--;
return;
}
if(node->sons[w[pos]-'a']==NULL)
{
return;
}
Delete(w,node->sons[w[pos]-'a'],pos+1);
}
int Query1(string &w,Trie* node,int pos)
{
if(pos == w.size())
{
return (*node).cnt;
}
if(node->sons[w[pos]-'a']==NULL)
{
return 0;
}
return Query1(w,node->sons[w[pos]-'a'],pos+1);
}
int Query2(string &w,Trie* node,int pos)
{
if(pos == w.size())
{
return w.size();
}
if(node->sons[w[pos]-'a']==NULL || node->sons[w[pos]-'a']->howmany == 0)
{
return pos;
}
return Query2(w,node->sons[w[pos]-'a'],pos+1);
}
int main()
{
while(fin>>op)
{
fin>>str;
if(op == 0)
{
Insert(str,root,0);
}
else{
if(op == 1)
{
Delete(str,root,0);
}
else{
if(op == 2)
{
fout<<Query1(str,root,0)<<'\n';
}
else{
if(op == 3)
{
fout<<Query2(str,root,0)<<'\n';
}
}
}
}
}
}