31. 妹妹,我的蛋蛋又大又硬(原TOJ 67)

0 Judge

Code: 0


\( \newcommand{\ord}[1]{\mathcal{O}\left(#1\right)} \newcommand{\abs}[1]{\lvert #1 \rvert} \newcommand{\floor}[1]{\lfloor #1 \rfloor} \newcommand{\ceil}[1]{\lceil #1 \rceil} \newcommand{\opord}{\operatorname{\mathcal{O}}} \newcommand{\argmax}{\operatorname{arg\,max}} \newcommand{\str}[1]{\texttt{"#1"}} \)

妹妹,我的蛋蛋又大又硬(原TOJ 67)

題目敘述

雄精英二號 (簡稱雄二) 在和他的妹妹 (簡稱桐乃) 都有養寵物,雄二養了一只手動壓縮高速水箭龜 (簡稱龜王),桐乃養了一只 aaabaaajss (簡稱雕王)。

sproutsprout
圖一、二:龜王與雕王。

這一天,雄二和桐乃為了「誰的蛋比較硬」的事情在爭吵,彼此都覺得自己寵物的蛋比較堅固,於是他們想出了這樣的方法來檢測:首先他們找到一間非常高的大樓 (你可以假設科技很進步,高樓高達$2147483647$層,最低的樓層為$1$),接著試摔他們寵物的蛋。如果蛋在第$N$樓沒破,但在第$N+1$樓恰好破了,我們就說這顆蛋的硬度是$N$。測量完後,比較誰的蛋硬度比較大,誰就贏了。

現在給你的問題是:假設不需要考慮蛋的數量的問題,有沒有辦法可以盡快地測量出蛋的硬度呢?

說明

本題為互動題,你所上傳的程式碼必須包含main函式,並在開頭#include "SunMoon.h",你的程式需要用到下列三個函式(可以直接在你的程式中呼叫這些函式),其中throw_egg函式不能呼叫超過$32$次,同時請不要在main函式內使用任何I/O function。

void initialize();

initialize:初始化一些變數,在測試開始前請記得呼叫此函式,否則出了任何問題一概不負責。

int throw_egg( int x );

throw_egg:將一顆蛋從$x$樓丟下。回傳值為$1$代表蛋落地後未破掉,$0$代表蛋破了。若呼叫超過該子題可測試次數的上限將獲得Wrong Answer。

void answer( int x );

answer:如果你已經測量出蛋的硬度了,那麼請呼叫此函式,$x$為你的答案。若結果錯誤將獲得Wrong Answer。

範例

一個不會AC的程式碼範例:
#include "SunMoon.h"
int Gintama = 38;
int twitchplayspokemon;

int main()
{
    initialize();
    if (throw_egg(2)==1)
        answer(2);
    else
        answer(1);
}

配分方法

  • 40% throw_egg函式不能呼叫超過$10^6$次,同時硬度不會超過$10^6$。
  • 60% 上述條件不存在


Judge Setting

run-time limit: 10 ms
memory limit: 5275648 byte
測資數量: 0