Omówienie zadania Skarb (III etap XXXI OI)
Pierwsze podejście - rozwiązanie losowe
Zadawanie pytań o losowe względnie pierwsze liczby z przedziału
Żeby znaleźć rozwiązania pasujące do zadanych zapytań, w przypadku małych
Przy dobrej implementacji takie rozwiązanie pozwala zdobyć około 25 punktów.
Rozwiązanie pierwiastkujące:
W tym rozwiązaniu będziemy starać się odtworzyć zapis binarny liczby
- w przypadku odpowiedzi
dowiemy się jakie jest ostatnich bitów - w przypadku odpowiedzi
dowiemy się jakie jest pierwszych bitów
Wybierając odpowiednio parametr
Po 6 takich zapytaniach zostanie nam jeden bit, którego nie znamy, czyli dwie możliwe odpowiedzi. Możemy wtedy zapytać o większą z nich, dostając jednoznaczną odpowiedź. Daje to rozwiązanie z pesymistyczną ilością 7 zapytań na ostatnim podzadaniu.
Takie rozwiązanie pozwala zdobyć 74 punkty.
Rozwiązanie wzorcowe:
Aby przekształcić rozwiązanie pierwiastkujące, skorzystamy z następującej obserwacji:
- Jeżeli aktualnie zbiór możliwych odpowiedzi tworzy
kolejnych liczb dających tę samą restę z dzielenia przez , gdzie , to każda z tych możliwości ma inną część całkowitą oraz inną resztę z dzielenia przez . Zatem w takim wypadku wystarczy nam jedno zapytanie o tę liczbę.
Jeżeli będziemy korzystać z powyższej obserwacji, to pytanie o
Empirycznie sprawdzając ile wynosi
Rozwiązanie alternatywne - drzewo decyzyjne
Kluczem w tym rozwiązaniu jest obserwacja, że jeżeli znamy część całkowitą z dzielenia przez 4, to możemy wygrać w 2 ruchy (napierw pytając o 2, a następnie o większą z możliwości które zostaną).
Rozważmy następujące drzewo decyzyjne zapytań.
div A +-------+ mod A +------------------| A |------------------+ | +-------+ | div 4 +-------+ mod 4 div E +-------+ mod E +-------| 4 |-------+ +-------| E |-------+ | +-------+ | | +-------+ | wygrana | | | +2 kroki | | | div B +-------+ mod B +-------+ +-------+ +-------| B |-------+ | F | | G | | +-------+ | +-------+ +-------+ | | +-------+ +-------+ | C | | D | +-------+ +-------+
Liczby
- Jeżeli dostaliśmy wcześniej odpowiedź
na zapytanie o liczbę , to później będziemy zadawać pytania jedynie o liczby względnie pierwsze z .
Teraz będziemy zadawać pytania, schodząc po drzewku decyzyjnym. Będziemy pamiętać: resztę z dzielenia
Spróbujmy odtworzyć, jakie powinny być kolejne stałe:
- Zacznijmy od
. Chcemy, żeby:-
było jak największe, -
, - by dało się odzyskać poprawne
po wszystkich zapytaniach.
przez oraz znamy część całkowitą z dzielenia przez , więc . Ale też musi być względnie pierwsze z , więc po prostu . -
- W przypadku
, spójrzmy na ścieżkę kończącą się w . Znamy resztę z dzielenia przez oraz część całkowitą z dzielenia przez , więc zgodnie z zasadami ( oraz B względnie pierwsze z 12) weźmy na przykład . - Dla
znamy resztę z dzielenia przez oraz część całkowitą z dzielenia przez , wieć wybierzmy . - Znając całe lewe poddrzewo, możemy dobrać
. Będąc w wierzchołku znamy resztę z dzielenia przez 1892 oraz część całkowitą dzielenia przez , więc wybierzmy . - Przyjrzyjmy się prawemu poddrzewu, zakładając że
. Jak dostaniemy odpowiedź dzielenia w , to będziemy znać resztę z dzielenia przez oraz część całkowitą z dzielenia przez , więc weźmy . - W takim razie jak dostaniemy odpowiedź modulo przez
, to będziemy znać resztę z dzielenia przez oraz część całkowitą dzielenia przez , więc wybierzemy . - Jak rozważymy część całkowitą z dzielenia przez
, to do tej pory będziemy znać resztę z dzielenia przez . Zatem możemy wziąć . - Z kolei w przypadku reszty z dzielenia przez
, znamy w sumie resztę z dzielenia przez , więc rzeczywiście wygraliśmy.
Teraz wystarczy zadać odpowiednie pytania i wywnioskować odpowiedź.