Pagini recente » Cod sursa (job #2512388) | Cod sursa (job #286911) | Cod sursa (job #2710279) | Cod sursa (job #1913165) | Cod sursa (job #2358257)
#include <bits/stdc++.h>
#include <string>
#include <set>
using namespace std;
int n,l;
struct Nod
{
Nod *copil[26];
int nr;
bool EOW=false;
};
struct Nod *NewNode(void)
{
struct Nod *P = new Nod;
for(int i=0; i<26; i++)
P->copil[i]=NULL;
P->nr=0;
return P;
};
Nod *root=NewNode();
Nod *Poz[400005];
void insert(Nod *root,string s)
{
Nod *Iter=root;
for(auto it=s.begin();it<s.end()-1;it++)
{
int index=*it-'a';
if(Iter->copil[index]==NULL)
{
Iter->copil[index]=NewNode();
}
Iter->copil[index]->nr++;
Iter=Iter->copil[index];
}
Iter->EOW=true;
}
void Op0(string s)
{
insert(root,s);
}
void itera(Nod *iter,string s,int i)
{
if(i==s.length()-1)
{
iter->EOW=false;
return;
}
int index=s[i]-'a';
iter->copil[index]->nr--;
itera(iter->copil[index],s,i+1);
if(iter->copil[index]->nr==0)
{
iter->copil[index]=NULL;
}
}
void Op1(string s)
{
Nod *Iter=root;
itera(root,s,0);
}
void Op2(string s)
{
Nod *iter=root;
int mx=1<<25;
for(auto it=s.begin();it<s.end()-1;it++)
{
int index=*it-'a';
if(iter->copil[index]==NULL)
{
printf("0\n");
return;
}
else if(iter->copil[index]->nr<mx)
mx=iter->copil[index]->nr;
iter=iter->copil[index];
}
if(iter->EOW==true)
printf("%d\n",mx);
else
printf("0\n");
}
void Op3(string s)
{
Nod *iter=root;
int l=0;
for(auto it=s.begin();it<s.end()-1;it++)
{
int index=*it-'a';
if(iter->copil[index]==NULL)
break;
l++;
iter=iter->copil[index];
}
printf("%d\n",l);
}
int main()
{
int k;
freopen("triw.in","r",stdin);
freopen("trie.out","w",stdout);
while(scanf("%d ",&k)!=EOF)
{
string s="";
char c='0';
do
{
scanf("%c",&c);
s+=c;
}while(c!='\n');
s[s.size()-1]='\0';
if(k==0)
Op0(s);
if(k==1)
Op1(s);
if(k==2)
Op2(s);
if(k==3)
Op3(s);
}
return 0;
}