Sort 1(SPOJ)

0

Witam! Próbowałem zrobić program Sort 1 z systemu SPOJ, i nawet zrobiłem program, który dla podanych danych wejściowych zwraca dobre wyniki, jednak SPOJ nie chce go zaakceptować (WRONG ANSWER). Wiem, ze mój program nie uwzględnia sytuacji, gdy dwie odległości są sobie równe, jednak w zadaniu jest wyraźnie napisane, że żadne dwie z podanych odległości nie są sobie równe. Zresztą zobaczcie sami.
http://pl.spoj.com/problems/PP0506A/

KOD:

#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
	int t;		//ilosc testow
	int n;		//ilosc punktow
	cin >> t;	

		for (size_t i = 0; i < t; ++i)
		{
			cin >> n;
			string *name = new string[n];		//nazwa punktu
			int *x = new int[n];				//wspolrzedna x
			int *y = new int[n];				//wspolrzedna y
			double *d = new double[n];			//odleglosc

			for (size_t j = 0; j < n; ++j)
			{
				cin >> name[j] >> x[j] >> y[j];
				if (name[j].length() > 10 || x[j] < -1000 || x[j] > 1000 || y[j] < -1000 || y[j] > 1000) goto koniec;
				d[j] = sqrt(pow(x[j], 2) + pow(y[j], 2));
			}
			cout << endl;

			sort(d, d + n);
			for (size_t j = 0; j < n; ++j)
			{
				for (size_t k = 0; k < n; ++k)
				{
					if (d[j] == sqrt(pow(x[k], 2) + pow(y[k], 2)))
					{
						cout << name[k] << " " << x[k] << " " << y[k] << endl;
						break;
					}
				}
			}
			koniec:
			cout << endl;


			delete[]name; delete[]x; delete[]y; delete[]d;
		}

	return 0;
} 
0

Może nie rozwiazanie problemu ale używanie goto to zło :P

0

cała ta linijka z goto jest totalnie zbędna. Niestety na SPOJ zdarza się, że nie wszystkie dane testowe spełniają warunki (ograniczenia) podane w treści.
A tak poza tym, to strasznie przekombinowane.
Nie lepiej zrobić sobie strukturę opisującą punkt i dostarczyć do std:sort sposób porównywania danych?
Te drukowanie punktów na podstawie szukania pasującej odległości jest bardzo niepewne, zawłaszcza, że sprawdzasz równość liczb zmiennoprzecinkowych.
Jeśli już się upierasz na to rozwiązanie to wystarczyło by d było tablicą int-ów oraz

d[j] = x[j]*x[j] + y[j]*y[j];
0

Chciałem to zrobić bez struktur, bo jestem laikiem i niestety nie bardzo umiem posługiwać się strukturami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1