Zadanie spoj Sort 1

0

Witam serdecznie robię zadanie ze spoja ale sędzia nie przepuszcza mi go. Nie potrafię sam znaleźć błędu, czy ktoś mógłby rzucić okiem
Chodzi o zadanie http://pl.spoj.com/problems/PP0506A/

#include <iostream>
#include <cmath>
using namespace std;
struct punkt{
	char p;
	int x,y;
	double odl;
	
	
};
int main()
{
   int testy, x, y,ile;
   char p;
   cin>>testy;
   while(testy--)
   {
      cin>>ile;
      punkt* tab = new punkt[ile];
      for(int i=0 ; i<ile ; i++){
      	cin >> tab[i].p;cin >>tab[i].x; cin >> tab[i].y;
		tab[i].odl = sqrt(tab[i].x * tab[i].x + tab[i].y * tab[i].y);	
      }
      for( int k = 0; k < ile; k++ )
    {
        for( int g = 0; g < ile - 1; g++ )
        {
            if( tab[ g ].odl > tab[ g + 1 ].odl )
                 swap( tab[ g ], tab[ g + 1 ] );
           
        }
    }
    for (int j = 0; j < ile; ++j)
      {
         cout << tab[j].p << " " << tab[j].x << " " << tab[j].y << endl;
      }
      delete[] tab;
      cout << endl;
   }   
}
 
1

http://matematyka.pisz.pl/strona/1248.html
Gdzie 1 punkt to początek układu współrzędnych (0,0) a drugi to ten Twój podany.
Poza tym: "nazwa jest ciągiem co najwyżej 10 liter alfabetu łacińskiego" a u Ciebie jest to zwykły char mieszczący 1 znak.

0
bool operator< (punkt A, punkt B)
{
     return ((A.x*A.x+A.y*A.y)<(B.x*B.x+B.y*B.y));
}

Do sortowania można wtedy spokojnie użyć std::sort().

Edit: double ze struktury możesz spokojnie wtedy usunąć :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.