Pagini recente » Cod sursa (job #2179258) | Cod sursa (job #2718385) | Cod sursa (job #2179237) | Cod sursa (job #2718379) | Cod sursa (job #2675978)
#include <bits/stdc++.h>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct trie
{
int num,nrcuv;
vector<int> v;
trie()
{
num=0;
nrcuv=0;
v.resize(27);
}
};
vector <trie> arb;
int cod;
string s;
void add()
{
int nod=0;
for(int i=0;i<s.size();i++)
{
if(arb[nod].v[s[i]-'a']==0)
{
arb.push_back(trie());
arb[nod].v[s[i]-'a']=arb.size()-1;
}
nod=arb[nod].v[s[i]-'a'];
arb[nod].num++;
}
arb[nod].nrcuv++;
}
void Delete()
{
int nod=0;
for(int i=0;i<s.size();i++)
{
nod=arb[nod].v[s[i]-'a'];
arb[nod].num--;
}
arb[nod].nrcuv--;
}
int count()
{
int nod=0;
for(int i=0;i<s.size();i++)
{
nod=arb[nod].v[s[i]-'a'];
if(arb[nod].num==0)
return 0;
}
return arb[nod].nrcuv;
}
int lcp()
{
int nod=0;
for(int i=0;i<s.size();i++)
{
nod=arb[nod].v[s[i]-'a'];
if(arb[nod].num==0)
return i;
}
return s.size();
}
int main()
{
arb.push_back(trie());
while(in>>cod>>s)
{
if(cod==0) add();
else if(cod==1) Delete();
else if(cod==2) out<<count()<<"\n";
else out<<lcp()<<"\n";
}
return 0;
}