Pagini recente » Cod sursa (job #539961) | Cod sursa (job #591596) | Cod sursa (job #2341211) | Cod sursa (job #913008) | Cod sursa (job #3252009)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int c;
string s;
struct Tnode {
int cnt, fii;
Tnode* v[26];
Tnode() {
cnt=fii=0;
for (int i=0; i<=25; i++) v[i]=NULL;
}
};
Tnode *radacina=new Tnode;
void add(Tnode* nod, string s, int i) {
if (i==s.size()) {
nod->cnt++;
return ;
}
if (nod->v[s[i]-'a']==NULL) {
nod->v[s[i]-'a']=new Tnode;
nod->fii++;
}
add(nod->v[s[i]-'a'], s, i+1);
}
void deletee(Tnode* nod, string s, int i) {
if (i==s.size()) {
nod->cnt--;
if (nod->cnt==0 && nod->fii==0 && nod!=radacina) {
nod=NULL;
}
return ;
}
else {
deletee(nod->v[s[i]-'a'], s, i+1);
if (nod->v[s[i]-'a']==NULL) nod->fii--;
if (nod->cnt==0 && nod->fii==0 && nod!=radacina) {
nod=NULL;
}
}
}
void cntt(Tnode* nod, string s, int i) {
if (i==s.size()) {
fout<<nod->cnt<<'\n';
return ;
}
if (nod->v[s[i]-'a']==NULL || (nod->v[s[i]-'a']->cnt==0 && nod->v[s[i]-'a']->fii==0)) {
fout<<0<<'\n';
return ;
}
cntt(nod->v[s[i]-'a'], s, i+1);
}
void pref(Tnode* nod, string s, int i) {
if (i==s.size()) {
fout<<i<<'\n';
return ;
}
if (nod->v[s[i]-'a']==NULL || (nod->v[s[i]-'a']->cnt==0 && nod->v[s[i]-'a']->fii==0)) {
fout<<i<<'\n';
return ;
}
pref(nod->v[s[i]-'a'], s, i+1);
}
int main()
{
while (fin>>c>>s) {
if (c==0) add(radacina, s, 0);
if (c==1) deletee(radacina, s, 0);
if (c==2) cntt(radacina, s, 0);
if (c==3) pref(radacina, s, 0);
}
return 0;
}