[C++] Zadanie "Wesoła małpka"
Ostatnio zmodyfikowano 2014-12-02 20:10
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-12-01 16:48:13 @Monika90 Jesteś wspaniała. C: Działa, ale nie wiem dlaczego akurat NWD. :/
W jaki sposób to skróciłaś?
Czasy po przerobieniu: 1d)3.25s/7.00s 1e)3.25s/7.00s 1f)3.25s/7.00s |
|
Monika90 |
» 2014-12-02 14:48:51 Dla przykładu niech klatek będzie n=12, a małpiszon wskakuje na co piętnastą klatkę (d=15). Dla wygody rozwińmy kółko z klatek wraz ze skaczącą po nich małpą w nieskończony ciąg:
0123456789AB0123456789AB0123456789AB0123456789AB0123456789AB0123456789AB01234 itd... @..............@..............@..............@..............@..............@. itd... \----------------------------------------------------------/
Widać, że od pewnego momentu układ będzie się powtarzał. Skoro tak, to żeby wiedzieć na ile i na które klatki wskoczy małpa wystarczy przeanalizować ten powtarzający się segment, który zaznaczyłam. Okazuje się, że długość tego segmentu jest równa najmniejszej wspólnej wielokrotności liczb n i d, czyli NWW(n, d), a ilość klatek na które wskoczy małpa jest równa długosci powtarzającego się segmentu podzielonej przez długość skoku, czyli NWW(n, d) / d. Wiadomo że NWW(n, d) == n * d / NWD(n, d), zatem nasza odpowiedź to: n * d / NWD(n, d) / d, co po uproszczeniu daje: n / NWD(n, d) |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2014-12-02 20:10:54 Wielkie dzięki! :D |
|
1 « 2 » |