<table border=0> <tr> <td width="80%"> EJOI 2020 Practice </br> <b>eggs</b> (Slovene) </td> <td width="20%"> <img align="right" width="100" src="https://i.imgur.com/KUVHoM0.png"> </td> </tr> </table> # Jajca ## Naloga Na voljo imaš $n$ jajc in zgradbo s $h$ nadstropji. Veš, da obstaja naravno število $k$ $(k \leq h)$, da če vržeš jajce iz nadstropja $k-1$, se jajce ne razbije (in ga lahko uporabiš ponovno). Če ga vržeš iz $k$-tega nadstropja ali višje, se jajce razbije in ga ne moreš več uporabiti. Poizkus z metanjem jajc lahko ponavljaš dokler ti ne zmanjka jajc. Tvoja naloga je, da natančno ugotoviš število $k$. Ob tem pa si želiš napraviti nadvse malo poizkusov. ## Interakcija Podan je program **DropEggs** skupaj z vzorčnim ocenjevalnikom. Implementirati moraš funkcijo: ```c int solve(int n, int h) ``` * Ocenjevalnik funkcijo pokliče le enkrat * $n$: število jajc * $h$: število nadstropij * Funkcija naj vrne število $k$. Zgoraj omenjena funkcija lahko kliče funkcijo: ```c int drop(int x) ``` * $x$: nadstropje * Funkcija vrže jajce iz $x$-tega nadstropja * Funkcija vrne $1$, če se jajce razbije, drugače vrne $0$. ## Omejitve * $1 \leq n \leq 100$ * $1 \leq h \leq 100$ ## Primer interakcije <table> <tr> <td rowspan=2 width="15%"> Primer vhoda ocenjevalniku </td> <td colspan=4> Primeri klicev </td> </tr> <tr> <td>Klic</td> <td>Vračilo</td> <td>Klic</td> <td>Vračilo</td> </tr> <tr> <td rowspan=9 width="15%">2 5 2</td> <td>solve(2, 5)</td> <td></td> <td></td> <td></td> </tr> <tr> <td></td> <td></td> <td>drop(3)</td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td>drop vrne 1</td> </tr> <tr> <td></td> <td></td> <td>drop(1)</td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td>drop vrne 0</td> </tr> <tr> <td></td> <td></td> <td>drop(2)</td> <td></td> </tr> <tr> <td></td> <td></td> <td></td> <td>drop vrne 1</td> </tr> <tr> <td></td> <td>solve vrne 2</td> <td></td> <td></td> </tr> <tr> <td></td> <td>Pravilno!</td> <td></td> <td></td> </tr> </table> ## Podnaloge Pri tej nalogi je zgolj ena podnaloga in tvoja ocena je vsota ocen testnih primerov. **Le zadnja oddaja naloge bo prispevala h končni oceni.** ## Ocenjevanje Naj bo $o$ najmanjše število potrebnih eksperimentov, s katerimi lahko natančno določimo $k$,$w = \min(2 \cdot o, h)$ in $c$ število eksperimentov, ki jih je napravil tvoj program. * Če program izvede neveljavno operacijo ali napačno ugiba odgovor, prejmeš $0 \%$ za testni primer. * Če $w < c$, prejmeš $0 \%$ za testni primer. * Če $o < c \leq w$, prejmeš $(10 + 80 \cdot \frac{w -c}{w -o}) \%$ za testni primer. * Če $c \leq o$, prejmeš $100 \%$ za testni primer.