Pagini recente » Cod sursa (job #2067050) | Cod sursa (job #1853257) | Cod sursa (job #487415) | Cod sursa (job #1682355) | Cod sursa (job #2053400)
#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;
p=new NOD;
p=start;
for (unsigned 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;
p=new NOD;
p=start;
for (unsigned int i=0; i<x.length(); i++)
{
p->nra[x[i]-'a']--;
if (p->C[x[i]-'a']!=NULL)
p=p->C[x[i]-'a'];
}
}
void caut(string x)
{
NOD *p;
p=new NOD;
p=start;
unsigned int i;
int nr1,nr2;
for (i=0; i<x.length()-1; i++)
{
p->nra[x[i]-'a']--;
if (p->C[x[i]-'a']!=NULL)
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;
p=new NOD;
p=start;
for (unsigned int i=0; i<x.length(); i++)
{
if (p->nra[x[i]-'a']==0)
{
fout<<i<<"\n";
return;
}
if (p->C[x[i]-'a']!=NULL)
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)
caut(x);
else if (tip==3)
mi(x);
}
return 0;
}