10 / 29
Jun 2018

Ogólnym zamysłem zadania było zastosowanie pewnych technik matematycznych w celu obliczenia wartości funkcji trygonometrycznych bez wbudowanych funkcji, ale można było także sprytnie obejść niedozwolone frazy :slight_smile:

Osobiście uwielbiam zadania, gdzie człowiek myśli o cudach i np. z powodu lenistwa / braku wprawy / braku wiary w siebie / braku wiedzy / stresu / nie zawsze zasadnego przekonania, że zajmie mu to 12h a są inne problemy do rozwiązania / … pomija zadanie znając sposób prowadzący do jego rozwiązania (na VIII fraktalu darowałem sobie z tego powodu trzy zadania, w tym to) a potem dowiaduje się, że:

Byłem na siebie zły przez dwa tygodnie, że nie wykazałem się sprytem tylko szablonowym myśleniem i darowałem sobie Matemastotenesa bo “przecież jestem już zmęczony, a tu są pewnie jakieś liczby zespolone lub szeregi i mi na to 5 godzin zejdzie a pewnie nie podołam”. No i na końcu okazuje się, że owszem - są, ale 5 godzin to raczej podejrzanie długo, a tak w ogóle to po co siedzieć i myśleć szablonowo, skoro można SPRYTNIE :wink:

Niestety mam problem z dawkowaniem sprytu i np. byłem przekonany, że Słówka, słóweczka z ostatniej edycji to drzewo trie i przy okazji nieco źle zinterpretowałem treść zadania (a dzisiaj czytam na fb, że wystarczyła mapa, którą odrzuciłem jako zbyt szablonową…) a w wariacjach liczbowych chciałem szukać nie wiadomo jakich zależności, a okazało się, że wystarczy tylko trochę sprytu (którym jeszcze się nie wykazałem, bo mam dziś trochę roboty i stać mnie tylko na seryjne wysyłanie zgłoszeń suboptymalnych, ale może w weekend przemyślę to co trzeba a nie będę zmieniał stałe wierząc, że trafię między WA i TLE tj. w AC :wink: )

ja od razu zrobiłem sprytnie :slight_smile: - tyle że WA i nie mam pomysłu co jest źle :frowning:

Dobra, dobra, ja Ci podopowiem i znów mnie w rankingu wyprzedzisz :stuck_out_tongue:

Ja osobiście miałem tam kilkanaście zgłoszeń ze “sprytnym” rozwiązaniem. Pomogły albo odpowiednio użyte procenty albo inne nieco liczenie kotangensa :wink:

był kod :slight_smile: dlaczego to nie działa? w zakresie od -360 do 360 stopni pokazało mi zgodność z funkcjami wbudowanymi , chyba że z cotangensem sie pomyliłam. Jak wynika z komentarzy niżej -0.00 nie równa sie 0.00 :slight_smile:

Na wyjściu nie powinna znaleźć się wartość -0.00 tylko 0.00 :wink:

ale spełnia warunek dokładność do dwóch miejsc po przecinku…

jednak tak… tu był błąd…
@michal04 ale proszę mi wytłumaczyć ile jest różnicy pomiędzy -0.00 a 0.00 że nie przyjmuje? Bo według mnie dokładność do dwóch miejsc po przecinku zachowana.

No różnica to minus. Zgadza się, w obu przypadkach dokładność jest zachowana, ale minus przed zerem jest uznawany za błąd

Arytmetycznie:
different (-0.00, 0.00) = ±0 ale MATEMATYCZNIE już jest inacze. W matematyce minus przed zerem [ujemne zero] był, jest i będze błędem.
Michał, mógłby użyć tutaj “sędziego” zmiennopozycyjnego i wtedy twój program byłby uznany za poprawny. Na szczęście, użył innego i taki/e błędy dzięki temu są natychmiast wyłapywane.
Swoją drogą, może to tylko błąd funkcji printf, że drukuje w taki sposób, a cout z odpowienimi parametrami działa poprawnie?

BTW
Dowiedziałem się właśnie, że uznałeś mnie za wielki autorytet, tu na polu SPOJ’a, bardzo to miłe, wielkie dzięki, ale też zobowiązujące. Mimo to, mogę się mylić, więc zawsze powinieneś sprawdzać mnie [jak i każdy inny uznany autorytet] porównując moje poglądy z innymi zródłami.

No nie, absolutnie niestety nie :wink: Niedozwolone frazy, dodatkowy [zmarnowany przez autora?] czas związany z użyciem specjalnego sędziego, były po to, by bardziej “skłonić” nas do bliskiego spotkania z szeregami Taylora i wzorem Eulera. Często jednak jest to trudne i rozwiązywacze znajdą jakąś [sprytną?] metodę obejścia intencji autora. A przecież chodzi tu także o naukę nowych rzeczy a nie używanie starych metod [wytrychów] :wink:

Dodatkowo, warto zauważyć, że:

To nie pierwsze ani nie ostatnie twoje bardzo fajne zadanie, gratuluje Michale!

i to zaakcentować i pogratulować autorowi, a nie skupiać się i pisać o sprytnych metodach! :wink:

zadanie jest bardzo ładne, ale jeżeli jest wybór pomiędzy rozwiązaniem złożonym a prostym to wybór jest oczywisty. Oczywiście można by zabronić użycia tablic, ‘switch’, ograniczyć ‘if’ i ‘?’ np. do 10, oraz pozwolić na tylko jedną stała znakową z tekstem “nie istnieje” - wymieniłem tu tylko oczywiste sposoby uniknięcia obliczania wartości sin(x), ale gdybym pomyślał jeszcze trochę to może jeszcze coś bym wymyślił :slight_smile:

natomiast to, że mnożenie liczb ujemnych przez 0 może powodować problemy zawsze mnie zaskakuje :slight_smile:

W życiu, gdy to ma być na wczoraj!
Na konkursach typu Fraktal.
Na SPOJ’u gdy chodzi o “szybkie” AC i pierwszą stronę rankingu.
Ale gdy chodzi “tylko” o naukę i doskonalenie umiejętności czy wybór jest też oczywisty? :wink:

Też mógłbym zaproponować różne frazy, np [c]math[.h] i to by wystarczyło w kilku językach [czy we wszystkich?] ale czy tu o to chodzi? No i jestem raczej przeciwnikiem prohibicji. Powinna wystarczyć zwykła informacja-komentarz pod zadaniem: Użyj szeregu Taylora lub wzoru Eulera.

A wątek został rozpoczęty i dotyczy[ł] …

@yula dostałaś już AC, więc może już czas i powinnaś usunąć swój kod?

zależy dla kogo :slight_smile: - nie nauczę się wiele bezmyślnie implementując stosunkowo prosty wzór, a szukanie obejścia jest dużo zabawniejsze

Usunięty :slight_smile: A zadanie fajne :slight_smile: Chociaż jak widać dla mnie większym problemem okazało sie -0.00 niż szukanie jak obliczyć :slight_smile: wiem że zero nie ma znaku przy obliczeniach i nie zaokrąglałam jako tako a właśnie polegałam na printf… Ale w zadaniu przydało by sie info że taka prezentacja niedozwolona.
I ktoś ma pomysł jak zrobić z tego nieszczęsnego -0 zwykłe zero bez specjalnego sprawdzania tego przypadku? Bo mi nie wychodzi inaczej niż ifem.

PS.
na temat -0 w matmie :wink: https://pl.wikipedia.org/wiki/±05

A więc jednak zbłądziłem :wink:

ifem chyba najłatwiej:

if (coś_tam < 0 and cos_tam > -0.005) coś_tam = 0;

Inaczej [bez if’a] np tak --> https://ideone.com/o0Jgze13

PS
Na rondach trzeba jednak bardzo uważać.

Jest kilka zadań, które nie akceptują -0 i niestety, ale to na implementującym, a nie na autorze ciąży odpowiedzialność, żeby o tym pamiętać. W razie problemów zawsze należy sprawdzić forum.

Jeżeli ktoś w danej chwili walczy o AC (a nie o czas 0.00 albo najmniejszą liczbę zgłoszeń do uzyskania AC) to w przypadku czegokolwiek zmiennoprzecinkowego wysyłamy kolejne zgłoszenia. Pierwsze to pierwszy epsilon i nieobsłużone -0.0, drugie to pierwszy epsilon ale obsłużone -0.0, trzecie to kolejny epsilon i nieobsłużone -0.0, …

a przynajmniej ja nigdy nie przejechałem się na tej taktyce, choć wymaga ona cierpliwości.

Jeżeli ktoś ma tzw klapki na oczach i jest zapatrzony tylko w AC i pierwszą stronę rankingu na SPOJ’u [np ja] to tak taka taktyka jest godna polecenia.

BTW
Ale przecież tu nie tylko o to chodzi. Istnieje życie poza Spojem [Fraktalem, CodeChef… itd] i już chociażby na PA [Potyczki Algorytmiczne, Olimpiady Inforematryczne itd] na takiej taktyce przejedziesz się na 100% [może nawet 111% :wink: ]

A więc jak …?
Np
Generujesz własny/e testy i testujesz.
Analizujesz działanie swojego kodu.
Sprawdzasz poprawność jego działania

A jeżeli już raz zdarzyła Ci się taka wpadka, taki problem, to powinieneś już wiedzieć [do końca świata i jeden-dwa dni dłużej] jak z nim postępować w przyszłości, a nie znowu wysyłać zgłoszenia metodą prób i błędów, aż się uda a potem promować taką metodę na forum.