Pagini recente » Cod sursa (job #1712923) | Cod sursa (job #2642329) | Cod sursa (job #37494) | Cod sursa (job #1813761) | Cod sursa (job #3279562)
#include <fstream>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct nod///26 de ref
{
nod* ch[26];
int cnt;
int ter;
nod()
{
ter=0;
cnt=0;
for(int i=0; i<26; i++)
ch[i]=nullptr;
}
}*root;
void inse(string s)
{
nod* a=root;
for(int i=0; i<s.size(); i++)
{
int ind=s[i]-'a';
//cout<<a->cnt;
if(!a->ch[ind])
{
//cout<<"-";
a->ch[s[i]-'a']=new nod;
a->ch[s[i]-'a']->cnt++;
}
else
a->ch[s[i]-'a']->cnt++;
a=a->ch[s[i]-'a'];
}
a->ter++;
}
void del(string s)
{
nod* a=root;
for (int i=0; i<s.size(); i++)
{
if (!a->ch[s[i]-'a'] || a->ch[s[i]-'a']->cnt==0)
{
return;
}
a=a->ch[s[i]-'a'];
}
if(a->ter)
{
a->ter--;
a=root;
for (int i=0; i<s.size(); i++)
{
a->ch[s[i]-'a']->cnt--;
a=a->ch[s[i]-'a'];
}
}
}
int cer2(string s)
{
nod* a=root;
for(int i=0; i<s.size(); i++)
{
if(!a->ch[s[i]-'a'] || a->ch[s[i]-'a']->cnt==0)//il cream
return 0;
a=a->ch[s[i]-'a'];
}
return a->ter;
}
int cer3(string s)
{
int max1=0;
nod* a=root;
for(int i=0; i<s.size(); i++)
{
if(!a->ch[s[i]-'a'] || a->ch[s[i]-'a']->cnt==0)
break;
max1=i+1;
a=a->ch[s[i]-'a'];
}
return max1;
}
int main()
{
string s;
int a;
root=new nod;
while(cin>>a>>s)
{
if(a==0)inse(s);
else if(a==1)
del(s);
else if(a==2)cout<<cer2(s)<<'\n';
else if(a==3)
cout<<cer3(s)<<'\n';
}
return 0;
}