Pagini recente » Borderou de evaluare (job #1895630) | Cod sursa (job #2986692)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int cnt = 0;
//string s;
char s[25];
struct trie
{
int nr,rasp;
trie *fii[27];
};
trie *t = new trie();
void adauga(trie *tr,char *s)
{
tr->nr++;
if(*s == '\0')
{
tr->rasp++;
return;
}
int x = *s - 'a';
if(tr->fii[x] == NULL)
{
tr->fii[x] = new trie();
}
adauga(tr->fii[x],s+1);
}
void scoate(trie *tr, char *s)
{
tr->nr--;
if(*s == '\0')
{
tr->rasp--;
return;
}
int x = *s - 'a';
scoate(tr->fii[x],s+1);
}
int search1(trie *tr, char *s)
{
if(*s == '\0')
return tr->rasp;
int x = *s - 'a';
if(tr->fii[x] == NULL)
{
return 0;
}
return search1(tr->fii[x],s+1);
}
int search2(trie *tr, char *s)
{
if(*s == '\0')
return cnt;
int x = *s - 'a';
if(tr->fii[x] == NULL || tr->fii[x]->nr == 0)
return cnt;
else
cnt++;
return search2(tr->fii[x],s+1);
}
int main()
{
int x;
while(f>>x>>s)
{
if(x == 0)
adauga(t,s);
if(x == 1)
scoate(t,s);
if(x == 2)
g<<search1(t,s)<<"\n";
if(x == 3)
{
cnt = 0;
g<<search2(t,s)<<"\n";
}
for(int i=0;i<=25;i++)
s[i] = '\0';
}
}