Cod sursa(job #583001)

Utilizator space.foldingAdrian Soucup space.folding Data 17 aprilie 2011 10:15:10
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <memory.h>
#include <cstdlib>
#define TO_INT(x) (x-'0')
#define TO_CHAR(x) (x+'0')
using namespace std;

struct cTrie
{
	int number;
	cTrie *next[10];
	cTrie()
	{
		memset(next, 0, 10*sizeof(cTrie*));
		number = 0;
	}
};
cTrie number_trie;
char number[20];

void insert(cTrie *trie, char *s)
{
	if(*s==0)
		trie->number++;
	else
	{
		if(trie->next[TO_INT(*s)] == 0)
			trie->next[TO_INT(*s)] = new cTrie;
		insert(trie->next[TO_INT(*s)], s+1);
	}
}

void show(cTrie *trie, int idx)
{
	int multiplicity = trie->number;
	number[idx]=0;
	while(multiplicity--)
		cout<<atoi(number)<<" ";

	for(int i=0; i<10; ++i)
		if(trie->next[i])
		{
			number[idx] = TO_CHAR(i);
			show(trie->next[i], idx+1);
		}
	
}



int main ()
{
	int n, length, i, j;
	char number[20], temp[20];
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	cin>>n;
	while(n>0)
	{
		cin>>temp;
		memset(number, '0', sizeof(number));
		length = strlen(temp);
		number[11]=0;
		for(i=10, j=length-1; j>=0; --j, --i)
			number[i]=temp[j];
		insert(&number_trie, number);
		--n;
	}
	show(&number_trie, 0);
};