Pagini recente » Cod sursa (job #1553790) | Cod sursa (job #1818778) | Cod sursa (job #896738) | Cod sursa (job #554060) | Cod sursa (job #1947969)
#include <cstdio>
#include <cstring>
using namespace std;
char cuv[30];
struct nod
{
int nr, fii;
nod *lit[30];
}*v;
void adunare(nod *v, int j)
{
if(j==strlen(cuv)-1)
{
v->nr++;
return;
}
if(!v->lit[cuv[j]-'0'])
{
v->lit[cuv[j]-'0']=new nod;
v->fii++;
}
adunare(v->lit[cuv[j]-'0'], j+1);
}
int scadere(nod *v, int j)
{
if(j==strlen(cuv)-1)
{
v->nr--;
return 0;
}
else
if(scadere(v->lit[cuv[j]-'0'], j+1))
{
v->lit[cuv[j]-'0']=0;
v->fii--;
return 0;
}
if(v->nr==0 && v->fii==0)
{
delete v;
return 1;
}
}
void nr_aparitii(nod *v, int j)
{
if(j==strlen(cuv)-1)
{
printf("%d\n", v->nr);
return;
}
if(v->lit[cuv[j]-'0'])
{
nr_aparitii(v->lit[cuv[j]-'0'], j+1);
return;
}
}
void lung_max(nod *v, int j)
{
if(j==strlen(cuv)-1)
return;
if(v->lit[cuv[j]-'0'])
{
lung_max(v->lit[cuv[j]-'0'], j+1);
return;
}
printf("%d\n", j-2);
return;
}
int main()
{
freopen("trie.in", "r", stdin);
// freopen("trie.out", "w", stdout);
while(fgets(cuv, 30, stdin))
{
cuv[strlen(cuv)-1]='\0';
switch(cuv[0]-'0')
{
case 0: adunare(v, 2);
case 1: scadere(v, 2);
case 2: nr_aparitii(v, 2);
case 3: lung_max(v, 2);
}
}
return 0;
}