Pagini recente » Cod sursa (job #642144) | Cod sursa (job #960117) | Cod sursa (job #1689087) | Cod sursa (job #1546742) | Cod sursa (job #2293790)
#include <bits/stdc++.h>
using namespace std;
struct trie{
int nr , cuv;
trie *nxt[30];
trie()
{
nr = cuv = 0;
for(int i = 0; i <= 26; i++)nxt[i] = NULL;
}
};
void Adauga(trie *p , string s , int pos){
if(pos == s.size() ){
p -> cuv++;
p -> nr++;
return;
}
p -> nr ++;
char lit = s[pos];
if(p -> nxt[lit - 'a'] == NULL)
{
trie *urm = new trie();
p -> nxt[lit - 'a'] = urm;
}
Adauga(p -> nxt[lit - 'a'] , s , pos + 1);
}
void Sterge(trie *p , string s , int pos){
if(pos == s.size() )
{
p -> cuv--;
p -> nr --;
return;
}
p -> nr --;
char lit = s[pos];
if(p -> nxt[lit - 'a'] == NULL)return;
Sterge(p -> nxt[lit - 'a'] , s , pos + 1);
}
int Aparitii(trie *p , string s , int pos){
if(pos == s.size() )
return p -> cuv;
char lit = s[pos];
if(p -> nxt[lit - 'a'] == NULL)return 0;
return Aparitii(p -> nxt[lit - 'a'] , s , pos + 1);
}
void Pre(trie *p , string s , int pos , int &ans){
if(p -> nr > 0)ans = max(ans , pos);
if(pos == s.size()){
return;
}
char lit = s[pos];
if(p -> nxt[lit - 'a'] == NULL){
// ans = max(ans , pos);
return;
}
Pre(p -> nxt[lit - 'a'] , s , pos + 1 , ans);
}
int op , ans;
string s;
int main()
{
ifstream fin("trie.in");
ofstream fout("trie.out");
trie *t = new trie();
while(fin >> op >> s)
{
if(op == 0)Adauga(t , s , 0);
if(op == 1)Sterge(t , s , 0);
if(op == 2)fout << Aparitii(t , s , 0) << "\n";
if(op == 3){
ans = 0;
Pre(t , s , 0 , ans);
fout << ans << "\n";
}
}
return 0;
}