VII Olimpiada Informatyczna 1999/2000

Zadanie: JAJ
Autor: Marcin Mucha
Jajka

Zawody III stopnia, dzień pierwszy 12 kwietnia 2000
Plik źródłowy: JAJ.??? (np. pas, c, cpp)
Plik wykonywalny: JAJ.exe
Plik wejściowy: JAJ.in
Plik wyjściowy: JAJ.out

Wiadomo, że jajko zrzucone z wystarczająco dużej wysokości brzydko się rozbija. Dawniej wystarczyła wysokość jednego piętra, ale genetycznie podrasowane kury znoszą jajka nie tłukące się nawet po zrzuceniu z wysokości 100000000 pięter. Badania nad wytrzymałością jajek prowadzi się wykorzystując drapacze chmur. Opracowano specjalną skalę wytrzymałości jajek: jajko ma wytrzymałość k pięter, jeśli zrzucone z k-tego piętra nie rozbija się, ale zrzucone z k+1-ego już tak. W przypadku gdy drapacz chmur, którym dysponujemy, ma n pięter przyjmujemy, że jajko rozbija się, gdy zrzucimy je z n+1-ego piętra. Przyjmujemy też, że każde jajko zrzucone z piętra o numerze 0 nie rozbija się.

Kierownik laboratorium postanowił wprowadzić oszczędności w procesie badawczym. Ograniczył on liczbę jajek, które wolno rozbić w trakcie eksperymentu mającego na celu ustalenie wytrzymałości jajek danego gatunku. Dodatkowo należy zminimalizować liczbę zrzutów jajek. Oznacza to, że mając do dyspozycji pewną liczbę jajek danego gatunku i drapacz chmur należy w jak najmniejszej liczbie prób stwierdzić, jaka jest wytrzymałość jajek danego gatunku.

Zadanie

Twoim zadaniem jest napisanie modułu zawierającego trzy procedury (funkcje w przypadku języka C/C++):

Program nadzorujący przebieg eksperymentów wywoła napisaną przez Ciebie procedurę nowy_eksperyment na początku każdego nowego eksperymentu, po czym cyklicznie będzie wykonywał następujące czynności:

aż do momentu, gdy Twój program stwierdzi, że zna wytrzymałość jajek gatunku używanego w danym eksperymencie (tzn. procedura analizuj_odpowiedz umieści odpowiednią wartość w zmiennej globalnej tt wiem).

Uwaga: Nie zakładaj, że program nadzorujący przebieg eksperymentów faktycznie ustala pewną wytrzymałość jajka przed rozpoczęciem danego eksperymentu. Może on dobierać ją w trakcie trwania eksperymentu w taki sposób, aby pasowała do wszystkich wcześniej udzielonych odpowiedzi oraz aby zmusić Twój program do zadania jak największej liczby pytań. Tak więc, powinieneś dążyć do tego, aby liczba pytań, jakie Twój program będzie musiał zadać w najgorszym przypadku, była jak najmniejsza.

Komunikacja

Komunikacja pomiędzy napisanym przez Ciebie modułem a programem nadzorującym przebieg eksperymentów odbywa się poprzez zmienne globalne. Liczba pięter drapacza zapisana będzie w zmiennej globalnej wysokosc typu Longint (w przypadku języka C/C++ jest to typ long int). Będzie to dodatnia liczba całkowita, nie większa niż 100000000. Maksymalna liczba jajek, które można stłuc w trakcie trwania eksperymentu zapisana będzie w zmiennej globalnej jajka typu Integer (w przypadku języka C/C++ jest to typ int). Będzie to dodatnia liczba całkowita, nie większa niż 1000. Zadanie pytania, czy jajko wytrzyma zrzucenie z k-tego piętra, w procedurze daj_pytanie polega na przypisaniu zmiennej globalnej pietro typu Longint (w przypadku języka C/C++ jest to typ long int) liczby k. Odpowiedź na zadane pytanie jest umieszczana w zmiennej globalnej odpowiedz typu Boolean (w przypadku języka C/C++ jest to typ int). Twierdzącej odpowiedzi na zadane pytanie (tzn. jajko wytrzyma) odpowiada wartość TAK, a przeczącej (tzn. jajko rozbije się) odpowiada NIE, gdzie TAK i NIE są stałymi o wartościach odpowiednio true i false (w przypadku języka C/C++ są to makra o wartościach odpowiednio 1 i 0). W przypadku znalezienia wytrzymałości jajka Twój program powinien w procedurze analizuj_odpowiedz zapisać do zmiennej globalnej wiem typu Boolean (w przypadku języka C/C++ jest to typ int) TAK oraz w zmiennej globalnej x typu Longint (w przypadku języka C/C++ jest to typ long int) znalezioną wytrzymałość jajka.

Katalogi i pliki

Programujący w Pascalu powinni przygotowywać swoje rozwiązanie w katalogu JAJPAS, natomiast programujący w C i C++ w katalogu JAJC. W katalogu JAJPAS (odpowiednio JAJC) znajdziesz następujące pliki:

Wyjście

Wynikiem Twojej pracy powinien być zapisany na dyskietce tylko jeden plik: JAJ.pas, JAJ.C lub JAJ.cpp.