Pagini recente » Cod sursa (job #1537289) | Cod sursa (job #1815365) | Cod sursa (job #34159) | Cod sursa (job #618627) | Cod sursa (job #3227139)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int next[26],cnt,totcnt;
} start;
vector<trie>v;
const int N=21;
char s[N];
int n=0;
void upd(int poz,int pozsir,int val)
{
v[poz].totcnt+=val;
if(s[pozsir]<'a' || s[pozsir]>'z')//am coborat pana la nodul final
{
v[poz].cnt+=val;
return;
}
int lit=s[pozsir]-'a';
if(!v[poz].next[lit])
{
v.push_back(start);
n++;
v[poz].next[lit]=n;
}
upd(v[poz].next[lit],pozsir+1,val);
}
int query(int poz,int pozsir)
{
if(s[pozsir]<'a' || s[pozsir]>'z')
return v[poz].cnt;
int lit=s[pozsir]-'a';
if(!v[poz].next[lit])
return 0;
query(v[poz].next[lit],pozsir+1);
}
int prefix(int poz,int pozsir)
{
if(!v[poz].totcnt)
return pozsir-1;
if(s[pozsir]<'a' || s[pozsir]>'z')
return pozsir-1;
int lit=s[pozsir]-'a';
if(!v[poz].next[lit])
return pozsir;
prefix(v[poz].next[lit],pozsir+1);
}
int main()
{
int q;
v.push_back(start);
while(fin>>q>>s)
{
if(q==0)
upd(0,0,1);
else
if(q==1)
upd(0,0,-1);
else
if(q==2)
fout<<query(0,0)<<'\n';
else
fout<<prefix(0,0)<<'\n';
}
return 0;
}