Cod sursa(job #2862963)

Utilizator rareshinnhoMiroiu Rares rareshinnho Data 6 martie 2022 10:09:02
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

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

struct trie
{
	int num,nrcuv;
	vector<int> v;
	trie()
	{
		num=0;
		nrcuv=0;
		v.resize(27);
	}
};
vector <trie> arbore;
int cod;
string s;

void add()
{
	int nod=0;
	for(int i=0;i<s.size();i++)
	{
		if(arbore[nod].v[s[i]-'a']==0)
		{
			arbore.push_back(trie());
			arbore[nod].v[s[i]-'a']=arbore.size()-1;
		}
		nod=arbore[nod].v[s[i]-'a'];
		arbore[nod].num++;
	}
	arbore[nod].nrcuv++;
}

void Delete()
{
	int nod=0;
	for(int i=0;i<s.size();i++)
	{
		nod=arbore[nod].v[s[i]-'a'];
		arbore[nod].num--;
	}
	arbore[nod].nrcuv--;
}

int count()
{
	int nod=0;
	for(int i=0;i<s.size();i++)
	{
		nod=arbore[nod].v[s[i]-'a'];
		if(arbore[nod].num==0)
			return 0;
	}
	return arbore[nod].nrcuv;
}

int lcp()
{
	int nod=0;
	for(int i=0;i<s.size();i++)
	{
		nod=arbore[nod].v[s[i]-'a'];
		if(arbore[nod].num==0)
			return i;
	}
	return s.size();
}

int main()
{
	arbore.push_back(trie());
	while(f>>cod>>s)
	{
		if(cod==0) add();
		else if(cod==1) Delete();
		else if(cod==2) g<<count()<<"\n";
		else g<<lcp()<<"\n";
	}
	return 0;
}