1 / 6
Aug 2011

Można prosić o jakieś dodatkowe, "tricky" testy smile? Testy podstawowe mój program przechodzi. Wydaje się, że rozpatrzyłem wszystkie przypadki, ale widocznie nie, bo WA...

  • created

    Aug '11
  • last reply

    Nov '17
  • 5

    replies

  • 1.0k

    views

  • 5

    users

  • 1

    like

  • 1

    link

Napisałem kod od nowa, udało się w końcu przejść wszystkie zamieszczone tutaj testy, ale wciąż WA :/. Zamieszczam kod, który niesamowicie skomplikowałem

Dzięki, AC :).
6 months later
3 years later

Właśnie wykonałem to zadanko, ale zastanawia mnie, w jaki sposób można uzyskać czas bliski 0.00. Mój program rozważa trzy przypadki, używa printf / scanf i liczy tylko na double'ach, a ma czas 0.16, który był dla mnie niemałym zaskoczeniem po zobaczeniu najlepszych zgłoszeń biorąc pod uwagę to, że przecież nie ma tu żadnej pętli tylko liczenie na wzorach wink Dodatkowo mój program używa funkcji z cmath i algorithm, ale różnica między nimi a "własną implementacją" jest niewielka (rzędu 1-2 sekund). W takim razie podejrzewam in/out lub istnienie jakiegoś sprytniejszego algorytmu wymagającego mniej obliczeń/ifów. Czy ktoś z wybitnym czasem potwierdza drugą opcję? Jeśli tak, to może jakaś mała podpowiedź, jeśli to nie jest wiedza tylko dla wtajemniczonych? smile Nie zależy mi na aż tak bardzo niskim czasie, po prostu jestem ciekaw, czy te niskie czasy wynikają z jakichś optymalizacji technicznych czy warto spróbować dojść do bardziej optymalnego algorytmu.

Najniższy czas 0.01 uzyskałem dzięki fast i/o + kombinacje alpejskie. Czas 0.7 scanf/printf + kombinacje.

Zastanów się, czy koniecznie trzeba wszystko liczyć na doublach? Czy sprawdzanie i porównywanie nie można zrobić na "zwykłych" liczbach całkowitych i dopiero, gdy wyjdzie taki przypadek, wydrukować tylko końcowe obliczenie w double np printf("%lf\n", sqrt(......));

Dodatkowo, czy int wystarcza? Czy można liczyć na intach i sprawdzać czy nie przekraczamy ich zakresu?

Zamiast porównywać sqrt() z costam, można porównywać sqrt()^2 z costam^2

Zamiast
sqrt(pow(x2-x0,2)+pow(y3-y1,2))
lepiej
sqrt((x2-x0)*(x2-x0).......)
a jeszcze lepiej
hypot(x2-x0,y3-y1) //ładniejszy i krótszy zapis i bezpieczeństwo obliczeń, a szybkość taka sama, lub nie wiele wolniej/szybciej.

2 years later

Mam podobną sytuację i nie mogę znaleźć błędu. Proszę o pomoc z tym zadaniem.