Cod sursa(job #1572867)

Utilizator LegionHagiu Stefan Legion Data 19 ianuarie 2016 10:43:43
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string s;
int indice;
struct nod
{
	int numarfii;
	int innod;
	int initializat;
	nod* fii[26];
	void initializeaza()
	{
		initializat = 1;
		int i;
		for (i = 0; i < 26; i++)
		{
			fii[i] = new nod;
			fii[i]->initializat = 0;
		}
		numarfii = 0;
		innod = 0;
	}
};
nod initial;
nod* acum;
int main()
{
	ifstream in("trie.in");
	ofstream out("trie.out");
	initial.initializeaza();
	int x;
	while (!in.eof())
	{
		in >> x;
		in >> s;
		indice = 0;
		acum = &initial;
		if (x == 0)
		{
			while (indice <s.size())
			{
				acum = acum->fii[s[indice] - 'a'];
				if (acum->initializat == 0)
				{
					acum->initializeaza();
				}
				if (indice == s.length() - 1)
					acum->innod++;
				else
					acum->numarfii++;
				indice++;
			}
		}
		else if (x == 1)
		{
			while (indice < s.size())
			{
				acum = acum->fii[s[indice] - 'a'];
				if (acum->initializat == 0)
				{
					acum->initializeaza();
				}
				if (indice == s.length() - 1)
					acum->innod--;
				else
					acum->numarfii--;
				indice++;
			}
		}
		else if (x == 2)
		{
			while (indice <= s.size())
			{
				acum = acum->fii[s[indice] - 'a'];
				if (indice == s.length() - 1)
					out<<acum->innod<<"\n";
				indice++;
			}
		}
		else if (x == 3)
		{
			while (indice < s.size())
			{
				acum = acum->fii[s[indice] - 'a'];
				if (acum->initializat == 0)
				{
					acum->initializeaza();
					out << indice+1;
					break;
				}
				if (acum->numarfii == 0)
				{
					out << indice << "\n";
					break;
				}
				indice++;
			}
		}
	}
}