Pagini recente » Cod sursa (job #2497809) | Cod sursa (job #73898) | Cod sursa (job #1811745) | Cod sursa (job #1673476) | Cod sursa (job #2053352)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("trie.in");
ofstream fout("trie.out");
typedef struct nod
{
nod* C[30];
int nra[30];
} NOD;
int tip;
string x;
NOD *start;
void addN(string x)
{
NOD *p,*urm;
p=new NOD;
p=start;
for (int i=0; i<x.length(); i++)
{
if (p->C[x[i]-'a']==NULL)
{
p->C[x[i]-'a']=new NOD;
p->nra[x[i]-'a']=1;
for (int j=0; j<=29; j++)
{
p->C[x[i]-'a']->C[j]=NULL;
p->C[x[i]-'a']->nra[j]=0;
}
}
else
p->nra[x[i]-'a']++;
p=p->C[x[i]-'a'];
}
}
void remV(string x)
{
NOD *p,*urm;
p=new NOD;
p=start;
for (int i=0; i<x.length(); i++)
{
p->nra[x[i]-'a']--;
p=p->C[x[i]-'a'];
}
}
void caut(string x)
{
NOD *p,*urm;
p=new NOD;
p=start;
int i;
int nr1,nr2;
for (i=0; i<x.length()-1; i++)
{
p->nra[x[i]-'a']--;
p=p->C[x[i]-'a'];
}
nr1=p->nra[x[i]-'a'];
p=p->C[x[i]-'a'];
nr2=0;
for (int i=0; i<=29; i++)
nr2+=p->nra[i];
fout<<nr1-nr2<<"\n";;
}
void mi(string x)
{
NOD *p,*urm;
p=new NOD;
p=start;
for (int i=0; i<x.length(); i++)
{
if (p->nra[x[i]-'a']==0)
{
fout<<i<<"\n";
return;
}
p=p->C[x[i]-'a'];
}
fout<<x.length()<<"\n";
}
int main()
{
start= new NOD;
for (int i=0; i<=29; i++)
{
start->C[i]=NULL;
start->nra[i]=0;
}
while (fin>>tip>>x)
{
if (tip==0)
{
addN(x);
}
else if (tip==1)
{
remV(x);
}
else if (tip==2)
{
fout<<"1:";
caut(x);
}
else if (tip==3)
{
fout<<"2:";
mi(x);
}
}
return 0;
}