Pagini recente » Cod sursa (job #729447) | Cod sursa (job #2744189) | Cod sursa (job #13463) | Cod sursa (job #3242513) | Cod sursa (job #2883660)
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie
{
int fr, frch;
trie *dad;
trie *next[26];
};
trie * root;
void init(trie *& t, trie * dad)
{
t = new trie;
t->fr = 0;
t->dad = dad;
for (int i = 0; i < 26; i++)
t->next[i] = NULL;
}
int o, i;
string s;
int main()
{
init(root, NULL);
while (fin >> o >> s)
{
if (o == 0)
{
trie * t = root;
for (i = 0; i < s.size(); i++)
{
if (t -> next[int(s[i])-'a'] == NULL)
{
trie * q;
init(q, t);
t -> next[int(s[i])-'a'] = q;
}
t = t-> next[int(s[i])-'a'];
}
t->fr++;
while (t != NULL)
{
t -> frch ++;
t = t -> dad;
}
}
else if (o == 1)
{
trie * t = root;
for (i = 0; i < s.size(); i++)
t = t->next[int(s[i])-'a'];
t->fr--;
while (t != NULL)
{
t -> frch --;
t = t -> dad;
}
}
else if (o == 2)
{
trie * t = root;
for (i = 0; i < s.size(); i++)
{
if (t->next[int(s[i])-'a'] == NULL)
{
fout << "0\n";
break;
}
t = t -> next[int(s[i])-'a'];
}
if (i == s.size()) fout << t->fr << "\n";
}
else if (o == 3)
{
trie *t = root;
for (i = 0; i < s.size(); i++)
{
if (t->next[int(s[i])-'a'] == NULL || t->next[int(s[i])-'a']-> frch == 0)
break;
t = t->next[int(s[i])-'a'];
}
fout << i << "\n";
}
}
return 0;
}