Cod sursa(job #2529414)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 23 ianuarie 2020 13:56:48
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
using namespace std;
int nr;
char s[27];
struct trie
{
	int nr,rasp;
	trie *fii[27];	
};
trie *t=new trie();
//--------------------------------------------------
void adauga(trie *poz, char *s)
{
	poz->nr++;
	if(*s=='\0')
	{
		poz->rasp++;
		return;
	}
	int x=*s-'a';
	if(poz->fii[x]==NULL) 
	{
		poz->fii[x]=new trie();
	}
	adauga(poz->fii[x],s+1);
}
//--------------------------------------------------
void scoate(trie *poz, char *s)
{
	poz->nr--;
		if(*s=='\0')
		{
			poz->rasp--;
			return;
		}
		int x=*s-'a';
		scoate(poz->fii[x],s+1);
}
//--------------------------------------------------
int cauta1(trie *poz, char *s)
{
	if(*s=='\0') return poz->rasp;
	int x=*s-'a';
	if(poz->fii[x]==NULL) 
	{
		return 0;
	}
	else return cauta1(poz->fii[x],s+1);
}
//--------------------------------------------------
int cauta2(trie *poz, char *s)
{
	if(*s=='\0') return nr;
	int x=*s-'a';
	if(poz->fii[x]==NULL || poz->fii[x]->nr==0) 
	{
		return nr;
	}
	else
	{
		nr++;
	} return cauta2(poz->fii[x],s+1);
}
//--------------------------------------------------
int main() {
	ifstream f("trie.in");
	ofstream g("trie.out");
	int op;
	while(f>>op>>s)
	{
		if(op==0)
			adauga(t, s);
		else if(op==1) scoate(t, s);
		else if(op==2) g<<cauta1(t,s)<<"\n";
		else
		{
			nr=0;
			g<<cauta2(t,s)<<"\n";
		} 
for(int i=1;i<=26;i++) s[i]='\0';
								 						
	}
}