1 / 8
Sep 2016

Mam taki jeden test, choć nieznacznie przekracza zakresy danych w zadaniu:
-1000 1000 0 0 1000 -1001
twój wynik, to:
2830549.25[32]
mój:
2830549.24[05]
Wynika z tego, że trochę inaczej kumulują się gdzieś w naszych kodach błędy zaokrągleń i dla dużych testów powodują malutką różnicę.

Np ja w swoim kodzie użyłem tylko w jednym miejscu funkcji sqrt*

===
*
Dokładniej, zamist sqrt, użyłem [tutaj] wygodniejszej i czasami dokładniejszej funkcji hypot, ale u Ciebie nie ma to wpływu na wynik. Mimo to warto poznać tą funkcję. Np u Ciebie zamiast:
da = math.sqrt((p[3] - p[1])**2 + (p[2] - p[0])**2)
możesz użyć:
da = math.hypot(p[3] - p[1], p[2] - p[0])
chociaż nie spowoduje to AC, ale jest jednak dużo krótsze do napisania.
Druga sprawa, to mój kod jest w c++ ale to nie powinno powodować różnicy, to raczej trochę inaczej liczenie wyniku powoduje te róznice i WA.

1 year later

Fajna sprawa z tą funkcją hypot, nie znałem tego.
Z tego co czytam hypot jest bezpieczniej używać, gdyż nie ma możliwości przekroczenia zakresu. Jednak jest dużo wolniejsze.
Od siebie tylko dodam że tu wcale nie trzeba używać sqrt.

3 years later

Dzień dobry,
mam problem z tym zadaniem. Dawno nie programowałem, lecz po roku postanowiłem powrócić i napisałem taki program -------- bardzo możliwe że jest tam sporo głupich błędów, więc prosiłbym o wyrozumiałość. Byłbym wdzięczny, gdyby ktoś pomógł mi odnaleźć błąd lub napisał możliwe testy i ich wyniki. Z góry dziękuję za pomoc.

link do zadania https://pl.spoj.com/problems/FR_02_01/7

Przevzytaj ten watek: Zaokrąglanie liczb może tu jest problem.?
Jeżeli tak, to możesz spróbować użyć innej wersji kompilatora C++ lub inaczej zokraglać.

Co do Twojego kodu, no cóż…

Dzięki za pomoc. Problemem nie okazało się zaokrąglanie a moja własna głupota. Program był nieco chaotyczny i skomplikowany i umknęła mi jedna literka. Mimo wszystko dzięki, zaokrąglanie liczb na pewno się przyda.

Dla użytkowników Pythona, załączam kod leniwego programisty (ale AC) co mu się wzorów nie chciało przepisywać. Ciekawe jakby śmigał w programistach C++ faworyzowanych przez Spoj.

…aaaa i jeszcze jedno: zamieńcie to zagadnienie na dane float to dopiero jest wyzwanie co do dokładności obliczeń gdy punkty stają się prawie współliniowe - piszę do adminów Spoj