Pagini recente » Cod sursa (job #2280274) | Cod sursa (job #1818390)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int t;
char s[101];
struct nod{
int val,nrf;
char c;
nod *v[26];
nod *ant;
}*R;
int add(char s[],int val,nod *r)
{
int n = strlen(s);
nod *aux;
for (int i=0;i<n;i++)
{
if (r->v[s[i]-'a']==NULL)
{
aux = new nod;
aux->c = s[i];
aux->ant = r;
aux->val = 0;
aux->nrf = 0;
r->v[s[i]-'a'] = aux;
r->nrf ++;
r=aux;
}
else
r=r->v[s[i]-'a'];
}
r->val += val;
int sav = r->val;
while (r->val == 0 && r->nrf == 0 && r!=R)
{
nod *aux = r->ant;
aux->v[r->c-'a'] = NULL;
delete r;
r=aux;
r->nrf--;
}
return sav;
}
int lgpref(char s[],nod *r)
{
int nr=0;
int n=strlen(s);
for (int i=0;i<n;i++)
{
if (r->v[s[i]-'a']==NULL)
{
return nr;
}
nr++;
r = r->v[s[i]-'a'];
}
return nr;
}
int main()
{
R = new nod;
while (f>>t)
{
f>>s;
if (t==0)
{
add(s,1,R);
}
else if (t==1)
{
add(s,-1,R);
}
else if (t==2)
{
g<<add(s,0,R)<<'\n';
}
else
{
g<<lgpref(s,R)<<'\n';
}
}
return 0;
}