Pagini recente » Cod sursa (job #2601638) | Cod sursa (job #2567669) | Cod sursa (job #2169322) | Cod sursa (job #1166004) | Cod sursa (job #3033608)
#include<fstream>
#include<iostream>
#include<climits>
#include<algorithm>
#include<cstring>
#include<cmath>
#include <vector>
#include <queue>
#include <iomanip>
#include <bitset>
#include <deque>
#define DIM 20
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
//ifstream f("in.in");
//ofstream g("out.out");
short op;
char s[DIM+5];
struct nod{
int cnt;
int fii;
nod *leg[26];
nod(){
cnt = 0;
fii = 0;
for(int i=0;i<26;i++){
leg[i] = NULL;
}
}
};
void inserare(nod *adr,char *s){
if(*s == 0){
adr->cnt++;
return;
}
if(adr->leg[*s-'a'] == NULL){
adr->leg[*s-'a'] = new nod;
adr->fii++;
}
inserare(adr->leg[*s-'a'],s+1);
}
void test(nod *adr,int ss[],int len){
for(int i=1;i<=len;i++){
cout<<char(ss[i]);
}
cout<<": "<<adr->cnt<<" "<<adr->fii<<'\n';
len++;
for(int i=0;i<26;i++){
ss[len] = i+'a';
if(adr->leg[i] != NULL){
test(adr->leg[i],ss,len);
}
}
}
bool stergere(nod *adr,char *s){
if(*s == 0){
adr->cnt--;
if(adr->cnt == 0){
delete adr;
return 1;
}
return 0;
}
if(stergere(adr->leg[*s-'a'],s+1)){
adr->leg[*s-'a'] = NULL;
adr->fii--;
if(adr->fii == 0){
delete adr;
return 1;
}
return 0;
}
return 0;
}
int afisare(nod *adr,char *s){
if(*s == 0){
return adr->cnt;
}
if(adr->leg[*s-'a'] == NULL){
return 0;
}
return afisare(adr->leg[*s-'a'],s+1);
}
int prefix(nod *adr,char *s,int len){
if(*s == 0){
return len;
}
if(adr->leg[*s-'a'] == NULL){
return len;
}
return prefix(adr->leg[*s-'a'],s+1,len+1);
}
int main(){
nod *rad;
rad = new nod;
while(f>>op){
f>>s;
if(op==0){
inserare(rad,s);
}else if(op==1){
stergere(rad,s);
}else if(op==2){
g<<afisare(rad,s)<<'\n';
}else{
g<<prefix(rad,s,0)<<'\n';
}
/*int ss[1000];
ss[0] = 0;
test(rad,ss,0);
cout<<'\n';*/
}
f.close();
g.close();
return 0;
}