Cod sursa(job #579798)

Utilizator mihai995mihai995 mihai995 Data 12 aprilie 2011 14:43:28
Problema Trie Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <vector>
using namespace std;

int n=0;
struct trie{int val,nr,next[25];} init;
char s[22];
vector<trie> v;

ifstream in("trie.in");
ofstream out("trie.out");

void update(int P,int poz,int val)
{
	v[P].nr+=val;
	if (!s[poz])
	{
		v[P].val+=val;
		return;
	}
	int x=s[poz]-'a';
	if (!v[P].next[x])
	{
		v.push_back(init);
		v[P].next[x]=(++n);
	}
	update(v[P].next[x],poz+1,val);
}

int query(int P,int poz)
{
	if (!P && poz)
		return 0;
	if (!s[poz])
		return v[P].val;
	return query(v[P].next[s[poz]-'a'],poz+1);
}

int multi()
{
	int i,P=0;
	for (i=0;s[i] && v[P].nr;i++)
	{
		P=v[P].next[s[i]-'a'];
		if (!P)
			return i;
	}
	return i-1;
}

int main()
{
	int k;
	init.val=init.nr=0;
	for (int i=0;i<26;i++)
		init.next[i]=0;
	v.push_back(init);
	while (in>>k>>s)
	{
		if (!k)
			update(0,0,1);
		if (k==1)
			update(0,0,-1);
		if (k==2)
			out<<query(0,0)<<"\n";
		if (k==3)
			out<<multi()<<"\n";
	}
	return 0;
}