Cod sursa(job #3222663)

Utilizator DumitrescuADumitrescuA DumitrescuA Data 11 aprilie 2024 10:56:44
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#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;
}