Pagini recente » Cod sursa (job #2490936) | Cod sursa (job #2668513) | Cod sursa (job #2153957) | Cod sursa (job #2395702) | Cod sursa (job #982972)
Cod sursa(job #982972)
#include <fstream>
#include <cstring>
#define ch (*s-'a')
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie{
int cnt,nrf;
trie *fii[26];
trie(){
cnt=nrf=0;
memset(fii,0,sizeof(fii));
}
};
trie* t=new trie;
void insert(trie *nod,char *s){
if(*s=='\0'){
nod->cnt++;
return;
}
if(!nod->fii[ch]){
nod->nrf++;
nod->fii[ch]=new trie;
} insert(nod->fii[ch],s+1);
}
bool del(trie *nod,char *s){
if(*s=='\0')
nod->cnt--;
else if(del(nod->fii[ch],s+1)){
nod->nrf--;
nod->fii[ch]=0;
}
if(!nod->cnt&&!nod->nrf&&nod!=t){
delete nod; return 1;
}
return 0;
}
int nrap(trie *nod,char *s){
if(*s=='\0')
return nod->cnt;
if(nod->fii[ch])
return nrap(nod->fii[ch],s+1);
return 0;
}
int smax(trie *nod,char *s,int k){
if(*s=='\0'||!nod->fii[ch])
return k;
return smax(nod->fii[ch],s+1,k+1);
}
int main()
{
char a[40];
while(f.getline(a,30)){
switch(a[0]){
case '0': insert(t,a+2); break;
case '1': del(t,a+2); break;
case '2': g<<nrap(t,a+2)<<'\n'; break;
case '3': g<<smax(t,a+2,0)<<'\n'; break;
}
}
return 0;
}