Pagini recente » Cod sursa (job #2437265) | Cod sursa (job #2473572) | Cod sursa (job #3243994) | Cod sursa (job #3130042) | Cod sursa (job #2043124)
#include <fstream>
#include <vector>
#include <queue>
#include <functional>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int caz,n,i,p,indx;
char sir[21],c;
struct noduri_si_laturi
{
int nr,litera[27],coeficientprefix;
} content;
vector<noduri_si_laturi> v;
void adauga(char sir[])
{
int nivel=0;
for(int i=0;i<strlen(sir);++i)
{
//fout<<sir[i]<<" ";
if(v[nivel].litera[sir[i]-'a']==0)
{
++indx;
v.push_back({});
v[nivel].litera[sir[i]-'a']=indx;
}
nivel=v[nivel].litera[sir[i]-'a'];
v[nivel].coeficientprefix++;
if(i==strlen(sir)-1)
{
v[nivel].nr++;
return;
}
}
//fout<<"\n";
}
void sterge(char sir[])
{
int nivel=0;
for(int i=0;i<strlen(sir);++i)
{
nivel=v[nivel].litera[sir[i]-'a'];
v[nivel].coeficientprefix--;
if(i==strlen(sir)-1)
{
v[nivel].nr--;
return;
}
}
}
int numara_aparitii(char sir[])
{
int nivel=0;
for(int i=0;i<strlen(sir);++i)
{
nivel=v[nivel].litera[sir[i]-'a'];
if(nivel==0)
return 0;
if(i==strlen(sir)-1)
return v[nivel].nr;
}
}
int numara_prefix(char sir[])
{
int nivel=0;
int rez=0;
for(int i=0;i<strlen(sir);++i)
{
nivel=v[nivel].litera[sir[i]-'a'];
if(nivel==0 || v[nivel].coeficientprefix==0)
return rez;
rez++;
}
return rez;
}
int main()
{
v.push_back({});
while(fin>>p>>sir)
{
if(p==0)
adauga(sir);
if(p==1)
sterge(sir);
if(p==2)
fout<<numara_aparitii(sir)<<"\n";
if(p==3)
fout<<numara_prefix(sir)<<"\n";
//fout<<v[i-1].x<<char(v[i-1].litera)<<"\n";*/
}
return 0;
}