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