Pagini recente » Cod sursa (job #1821257) | Cod sursa (job #1306849) | Cod sursa (job #2222665) | Cod sursa (job #2653923) | Cod sursa (job #2665585)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{
int nr,nrcuv;
vector <int> v;
trie()
{
nr=nrcuv=0;
v.resize(26);
}
};
vector <trie> arb;
void adauga (string s)
{
int j,nod=0;
for (j=0;j<s.size();j++)
{
if (arb[nod].v[s[j]-'a']==0)
{
arb.push_back(trie());
arb[nod].v[s[j]-'a']=arb.size()-1;
}
nod=arb[nod].v[s[j]-'a'];
arb[nod].nr++;
}
arb[nod].nrcuv++;
}
void sterge (string s)
{
int j,nod=0;
for (j=0;j<s.size();j++)
{
nod=arb[nod].v[s[j]-'a'];
arb[nod].nr--;
}
arb[nod].nrcuv--;
}
int nrcuv(string s)
{
int nod=0,j;
for (j=0;j<s.size();j++)
{
nod=arb[nod].v[s[j]-'a'];
if (arb[nod].nr==0)
{
return 0;
}
}
return arb[nod].nrcuv;
}
int celmailungprefix (string s)
{
int nod=0,j;
for (j=0;j<s.size();j++)
{
nod=arb[nod].v[s[j]-'a'];
if (arb[nod].nr==0)
{
return j;
}
}
return s.size();
}
int x;
string s;
int main()
{
arb.push_back(trie());
while (f>>x>>s)
{
if (x==0)
{
adauga(s);
}
else
if (x==1)
{
sterge(s);
}
else
if (x==2)
{
g<<nrcuv(s)<<'\n';
}
else
{
g<<celmailungprefix(s)<<'\n';
}
}
return 0;
}