Pagini recente » Cod sursa (job #1615128) | Cod sursa (job #916613) | Cod sursa (job #2770056) | Rating Alexandru Marin (alexandrumarin1111) | Cod sursa (job #2651525)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
//ifstream f("data.in");
//ofstream g("data.out");
const int dim = 100001;
int n = 0;
struct str{
int ord;
char val;
};
vector <str> v[dim];
int nrcuv[dim], nrlit[dim];
void add(char cuv[23]){
int prt = 0, i = -1;
char c = cuv[0];
bool ok = 1;
while(ok){
ok = 0;
c = cuv[++i];
if(c == 0)
break;
for(str it: v[prt]){
if(it.val == c){
prt = it.ord;
++nrlit[prt];
ok = 1;
break;
}
}
}
str aux;
while(cuv[i]){
aux.val = cuv[i];
aux.ord = ++n;
v[prt].push_back(aux);
prt = n;
++nrlit[prt];
++i;
}
++nrcuv[prt];
}
void rmv(char cuv[23]){
int prt = 0, i = -1;
char c = cuv[0];
bool ok = 1;
while(ok){
ok = 0;
c = cuv[++i];
if(c == 0){
--nrcuv[prt];
return;
}
for(str it: v[prt]){
if(it.val == c){
prt = it.ord;
--nrlit[prt];
ok = 1;
break;
}
}
}
}
void nrap(char cuv[23]){
int prt = 0, i = -1;
char c = cuv[0];
bool ok = 1;
while(ok){
ok = 0;
c = cuv[++i];
if(c == 0){
g << nrcuv[prt] << '\n';
return;
}
for(str it: v[prt]){
if(it.val == c){
prt = it.ord;
ok = 1;
break;
}
}
}
}
void pref(char cuv[23]){
int prt = 0, i = -1, lung = 0;
char c = cuv[0];
bool ok = 1;
while(ok){
ok = 0;
c = cuv[++i];
if(c == 0){
g << lung << '\n';
return;
}
for(str it: v[prt]){
if(it.val == c){
prt = it.ord;
ok = 1;
if(nrlit[it.ord] > 0)
++lung;
else {
g << lung << '\n';
return;
}
break;
}
}
}
g << lung << '\n';
}
int main()
{
int i = 0, op;
char cuv[23];
while(f >> op >> cuv){
switch(op){
case 0: { add(cuv); break; }
case 1: { rmv(cuv); break; }
case 2: { nrap(cuv); break;}
case 3: { pref(cuv); break;}
}
}
/*
for(i = 0; i <= n; ++i){
for(str it: v[i]){
g << i << "-" << nrcuv[i] << "-" << nrlit[i] << " " << it.ord << "-" << nrcuv[it.ord] << "-" << nrlit[it.ord] << " " << it.val << '\n';
//g << i << " " << it.ord << " " << it.val << '\n';
}
}
*/
return 0;
}