Pagini recente » Monitorul de evaluare | Cod sursa (job #1398947) | Cod sursa (job #541552) | Cod sursa (job #3242869) | Cod sursa (job #1412425)
#include<bits/stdc++.h>
using namespace std;
struct Trie {
int cnt, End;
Trie *fiu[26];
Trie() {
cnt = End = 0;
for(int i = 0; i < 26; ++ i)
fiu[i] = NULL;
}
};
Trie *T = new Trie;
char sir[50];
void Insert(Trie *Q)
{
for(int i = 0; sir[i]; ++ i) {
int CH = sir[i] - 'a';
if(!Q->fiu[CH])
Q->fiu[CH] = new Trie;
Q = Q->fiu[CH];
Q->cnt ++;
}
Q->End ++;
}
void Erase(Trie *Q, int i)
{
-- Q->cnt;
if(!sir[i]) {
-- Q->End;
return ;
}
Erase(Q->fiu[sir[i] - 'a'], i + 1);
}
int Query_1(Trie *Q, int i)
{
if(!sir[i])
return Q->End;
int CH = sir[i] - 'a';
if(!Q->fiu[CH])
return 0;
return Query_1(Q->fiu[CH], i + 1);
}
int Query_2(Trie *Q, int i)
{
if(!Q->cnt)
return 0;
if(!sir[i])
return 1;
int CH = sir[i] - 'a';
if(!Q->fiu[CH])
return 1;
return 1 + Query_2(Q->fiu[CH], i + 1);
}
int main()
{
ifstream cin("trie.in");
ofstream cout("trie.out");
int tip;
while(cin >> tip){
cin >> sir;
//cout << tip << " " << sir << "\n";
if(tip == 0)
Insert(T);
if(tip == 1)
Erase(T, 0);
if(tip == 2)
cout << Query_1(T, 0) << "\n";
if(tip == 3)
cout << Query_2(T, 0) << "\n";
}
return 0;
}