装满水的气球

交互题 提交数: 315, 通过率: 3.17%, 平均分: 37.34

题目描述:

一年一度的新生周活动开始了,你们做好了一些装满水的气球,准备恶搞那些可怜的新生……

活动开始之前,你们突然发现一个问题:这些气球实在是太硬了,很难把它们打破(如果打不破,它们就没有任何意义了),甚至从好几层楼高的楼顶把它们扔到地面,也打不破。你的任务是,借助一个n层的高楼确定气球的硬度。
实验过程是这样的:每次你拿着一个气球爬到第f楼,将它摔到地面。如果气球破了,说明它的硬度不超过f,这一个气球就不能继续用了;如果没破,说明硬度至少为f。注意,气球不会被实验所“磨损”。换句话说,如果在某层楼上往下摔,气球没破,那么在同一层楼不管再摔多少次它也不会破。
给你m个气球来测试(可以打破它们)。你的任务就是来做这个实验,来确定这些球的硬度。测试次数越少越好。保证如果你不用打表且用最优解,能得到满分。

输入格式:

此题是一道交互题

你的程序可以在标准输入会获得用空格隔开的两个数n和m,表示高楼的层数和你拿到的气球的个数。

输出格式:

若你要从f楼扔下来,则在输出Drop f 并换行,注意最后C++用cout<<flush或fflush(stdout),Pascal用flush(output),否则很可能TLE。之后你可以在标准输入读入一个字符串,若为Unbroken,则这个气球没破;若为Broken,则这个气球破了,而且你可以测试的气球少了一个。

若你已经确定了答案为ans(表示气球从ans楼扔下来不会破,且从ans+1楼扔下来会破;如果在n楼扔下来都不会破,则ans=n),则输出Answer ans并换行,还是一样,最后C++用cout<<flush或fflush(stdout),Pascal用flush(output)。

样例输入:

标准输入                   标准输出

样例输出:

10 2
                          Drop 5
Broken
                          Drop 1
Unbroken
                          Drop 2
Broken
                          Answer 1

提示:

数据如下:

1502677363667783304.png

评分规则:

设当前n、m下最少的操作次数为w100,则w90=向下取整(w100*125%),w80=向下取整(w90*125%),w70=向下取整(w80*125%),以此类推。

如果你测试的次数≤w100,那么你能获得该测试点100分;否则如果你测试的次数≤w90,那么你能获得该测试点90分;否则如果你测试的次数≤w80,那么你能获得该测试点80分,以此类推;若你的测试次数>w10,则0分。

时间限制: 1000ms
空间限制: 256MB

来源: by ljc