Pagini recente » Cod sursa (job #1954424) | Cod sursa (job #1547600) | Cod sursa (job #934525) | Cod sursa (job #424251) | Cod sursa (job #3252031)
//
// main.cpp
// TRIE
//
// Created by Andrada Minca on 28.10.2024.
//
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct node{
int cnt;
int nrfii;
node* v[26];
node(){
cnt=nrfii=0;
for(int i=0;i<=25;i++)v[i]=NULL;
}
};
int x;
string s;
node* radacina=new node;
void add(node* 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 node; nod->nrfii++;
}
add(nod->v[s[i]-'a'],s,i+1);
}
bool del(node* nod,string s,int i)
{
if(i==s.size()){nod->cnt--;}
else if(del(nod->v[s[i]-'a'],s,i+1))
{ nod->v[s[i]-'a']=NULL;nod->nrfii--;}
if(nod->cnt==0&& nod->nrfii==0&& nod!=radacina){delete nod;return 1;}
return 0;
}
int nrap(node* nod,string s,int i)
{
if(i==s.size())return nod->cnt;
if(nod->v[s[i]-'a']!=NULL)return nrap(nod->v[s[i]-'a'],s,i+1);
return 0;
}
int prmax(node* nod,string s,int i,int cont)
{
if(i==s.size())return cont;
if(nod->v[s[i]-'a']==NULL)return cont;
return prmax(nod->v[s[i]-'a'],s,i+1,cont+1);
}
int main()
{
while(fin>>x)
{
fin>>s;
if(x==0)add(radacina,s,0);
if(x==1)
{
del(radacina,s,0);
}
if(x==2)fout<<nrap(radacina,s,0)<<'\n';
if(x==3)fout<<prmax(radacina,s,0,0)<<'\n';
}
return 0;
}