1 / 29
Jun 2018


Sprawdzi ktoś testy albo podrzuci pomysł gdzie może wywalać sie ?
wejście
10
-90
-30
-45
-88
-89
-90
45
50
56

wyjście
-1.00 -0.00 nie istnieje 0.00
-0.50 0.87 -0.58 -1.73
-0.71 0.71 -1.00 -1.00
-1.00 0.03 -29.26 -0.03
-1.00 0.02 -60.10 -0.02
-1.00 -0.00 nie istnieje 0.00
0.71 0.71 1.00 1.00
0.77 0.64 1.19 0.84
0.83 0.56 1.48 0.68
0.12 0.99 0.12 8.14

  • created

    Jun '18
  • last reply

    Sep '20
  • 28

    replies

  • 2.2k

    views

  • 8

    users

  • 12

    likes

  • 9

    links

Po pierwsze to naliczyłem tam 9 wartości :wink: , więc dla takiego testu:
9
-90
-30
-45
-88
-89
-90
45
50
56
Powinny być takie odpowiedzi:
-1.00 0.00 nie istnieje 0.00
-0.50 0.87 -0.58 -1.73
-0.71 0.71 -1.00 -1.00
-1.00 0.03 -28.64 -0.03
-1.00 0.02 -57.29 -0.02
-1.00 0.00 nie istnieje 0.00
0.71 0.71 1.00 1.00
0.77 0.64 1.19 0.84
0.83 0.56 1.48 0.67
Polecam zapoznać się ze wzorem Eulera, jest to chyba dokładniejsza metoda niż szeregi Taylora :slight_smile:

Może trzeba użyć więcej elementów szeregu i liczyć - testować z maksymalną dokładnością na jaką pozwala double [long double?], a dopiero po sprawdzeniu, wyświetlić z dwoma miejscami po przecinku.

Sprawdzanie, dowolny kalkulator “naukowy” z takimi funkcjami.
Dowolny program matematyczny [geogebra]
Strona WolframAlpha .com
Własny programik do porównania, z wykorzystaniem zabronionych sin, cos itd.

Testować dla “najlepszych” danych - po obejrzeniu wykresów tych funkcji. Np dla 1stopnia [a może nawet warto dla 0.5 stopnia] oraz koniecznie dla ±10^12; [czy lepiej 3.6*10^12]

Ja mam tylko nadzieję, że wszelkiej maści metody analizy matematycznej i zespolonej nie przyćmią komuś umysłu w razie jakiegoś zadania na czas (np FRAKTAL), gdzie najrozsądniejszym rozwiązaniem jest oczywiście tablicowanie wyników na lokalnej maszynie i wklejenie wyników do wysyłanego kodu.

A to zadanie nie polegało na obejściu niedozwolonych fraz? :face_with_raised_eyebrow:
:yum:

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