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;
}