Pagini recente » Cod sursa (job #488903) | Cod sursa (job #125163) | Cod sursa (job #297882) | Cod sursa (job #2689873) | Cod sursa (job #2984892)
#include <fstream>
using namespace std;
ifstream cin ("trie.in");
ofstream cout ("trie.out");
struct nod
{
int cnt;
int ult;
nod *f[30];
};
nod* creeaza ()
{
nod *nou = new nod;
int i;
nou->cnt = 0;
nou->ult = 0;
for (i=0;i<26;i++)
nou->f[i] = NULL;
return nou;
}
void adauga (nod *r,string s)
{
int i;
for (i=0;s[i];i++)
{
char x = s[i];
int v = x - 'a';
if (!r->f[v])
r->f[v] = creeaza();
r = r->f[v];
r->cnt++;
}
r->ult++;
}
int app (nod *r,string s)
{
int i;
for (i=0;s[i];i++)
{
char x = s[i];
int v = x - 'a';
if (!r->f[v])
return 0;
r = r->f[v];
if (r->cnt == 0)
return 0;
}
return r->ult;
}
int lcp (nod *r,string s)
{
int i;
int rasp = 0;
for (i=0;s[i];i++)
{
char x = s[i];
int v = x - 'a';
if (!r->f[v])
return rasp;
r = r->f[v];
if (r->cnt == 0)
return rasp;
rasp++;
}
return rasp;
}
void sterge (nod *r,string s)
{
int i;
for (i=0;s[i];i++)
{
char x = s[i];
int v = x - 'a';
r = r->f[v];
r->cnt--;
}
r->ult--;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int i;
int t;
nod *rad = creeaza();
while (cin >> t)
{
string s;
cin >> s;
if (t == 0)
adauga(rad,s);
else if (t==1)
sterge (rad,s);
else if (t==2)
cout << app(rad,s) << '\n';
else if (t==3)
cout << lcp(rad,s) << '\n';
}
return 0;
}