Pagini recente » Cod sursa (job #1038038) | Cod sursa (job #1367078) | Cod sursa (job #2327257) | Cod sursa (job #1020321) | Cod sursa (job #1881234)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("trie.in");
ofstream g ("trie.out");
char s[50];
class arb
{
public:
arb * fii[30];
char c;
int value, totalValue;
arb()
{
for (int i = 0; i <= 26; i++)
fii[i] = NULL;
value = 0;
totalValue = 0;
}
} * papa, * p;
void type0(char s[])
{
char c = s[0];
int i = 0;
p = papa;
int n = strlen(s);
while (i < n)
{
//cout<<i<<' ';
c = s[i];
if (p->fii[c - 'a'] == NULL)
{
p->fii[c- 'a'] = new arb();
p = p->fii[c - 'a'];
//p->totalValue++;
}
else
{
p = p->fii[c - 'a'];
}
p->totalValue++;
i++;
}
p->value++;
}
void type1(char s[])
{
char c;
int i = 0;
p = papa;
int n = strlen(s);
while (i < n)
{
c = s[i];
p = p->fii[c - 'a'];
p->totalValue--;
i++;
}
p->value--;
}
int type2(char s[])
{
char c;
int i = 0, n = strlen(s);
p = papa;
while (i < n)
{
//cout<<i<<' ';
c = s[i];
if (p->fii[c - 'a'] == NULL)
{
//cout<<c<<' ';
return 0;
}
p = p->fii[c - 'a'];
i++;
}
return p->value;
}
int type3(char s[])
{
char c;
p = papa;
int i = 0, n = strlen(s), Max = 0;
while (i < n)
{
c = s[i];
if (p->fii[c - 'a'] == NULL)
return Max;
p = p->fii[c - 'a'];
if (p->totalValue > 0)
Max = i + 1;
i++;
}
return Max;
}
int main()
{
papa = new arb();
while (f.getline(s, 25))
{
//cout<<s<<' ';
int p = s[0] - '0';
// s + 2;
if (p == 0)
{
type0(s + 2);
}
else if (p == 1)
{
type1(s + 2);
}
else if (p == 2)
{
g<<type2(s + 2)<<'\n';
}
else if (p == 3)
{
g<<type3(s + 2)<<'\n';
}
}
return 0;
}