Pagini recente » Cod sursa (job #1871573) | Cod sursa (job #1311674) | Cod sursa (job #680059) | Cod sursa (job #925007) | Cod sursa (job #3222663)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct trie{
int val,nr,next[26];
} init;
vector<trie> v;
char s[22];
int n;
int query(int p1,int poz){
if (!p1 && poz) return 0;
if (!s[poz]) return v[p1].val;
return query(v[p1].next[s[poz]-'a'],poz+1);
}
void update(int p1,int poz,int val){
v[p1].nr+=val;
if(!s[poz]){
v[p1].val+=val;
return;
}
int a=s[poz]-'a';
if (!v[p1].next[a]){
v.push_back(init);
n++;
v[p1].next[a]=n;
}
update(v[p1].next[a],poz+1,val);
}
int multi(){
int i,p1=0;
for (i=0;s[i] && v[p1].nr;i++){
p1=v[p1].next[s[i]-'a'];
if (!p1) return i;
}
if (!v[p1].nr) i--;
return i;
}
int main()
{
int i,k,qn=0;n=0;
init.val=init.nr=0;
for(i=0;i<26;i++) init.next[i]=0;
v.push_back(init);
while(cin>>k>>s){
if(!k) update(0,0,1);
if(k==1) update(0,0,-1);
if(k>1) qn++;
if(k==2) cout<<query(0,0)<<"\n";
if (k==3) cout<<multi()<<"\n";
}
return 0;
}