Cod sursa(job #1951503)
Utilizator | Data | 3 aprilie 2017 17:48:18 | |
---|---|---|---|
Problema | Trie | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.72 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct nod
{
int v;
nod* nxt[26];
nod()
{
v=0;
memset(nxt, 0, sizeof(nxt));
}
};
int main()
{
int op; char cuv[25];
nod *r=new nod;
while(fin>>op>>cuv)
{
if(op==0)
{
nod* x=r;
for(int i=0;i<strlen(cuv);++i)
{
int c=cuv[i]-'a';
if(x->nxt[c]==0)
x->nxt[c]=new nod, x->nxt[c]->v++;
else
x->nxt[c]->v++;
x=x->nxt[c];
}
}
else if(op==1)
{
nod* x=r;
for(int i=0;i<strlen(cuv);++i)
{
int c=cuv[i]-'a';
if(x->nxt[c]!=0)
x->nxt[c]->v--;
x=x->nxt[c];
}
}
else if(op==2)
{
nod* x=r;
for(int i=0;i<strlen(cuv);++i)
{
int c=cuv[i]-'a';
x=x->nxt[c];
}
bool fin=true;
for(int i=0;i<26;++i)
if(x->nxt[i]!=0&&x->nxt[i]->v>0)fin=false;
fout<<(fin?(x->v):0)<<'\n';
}
else if(op==3)
{
int l=0;
nod* x=r;
for(int i=0;i<strlen(cuv);++i)
{
int c=cuv[i]-'a';
if(x->nxt[c]!=0 && x->nxt[c]->v>0)
l++, x=x->nxt[c];
else break;
}
fout<<l<<'\n';
}
}
return 0;
}