装满水的气球(加强版)

交互题 提交数: 35, 通过率: 14.29%, 平均分: 37.2

题目描述:

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

活动开始之前,你们突然发现一个问题:这些气球实在是太硬了,很难把它们打破(如果打不破,它们就没有任何意义了),甚至从好几层楼高的楼顶把它们扔到地面,也打不破。你的任务是,借助一个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

提示:

每一个测试点有10个属性:w100,w90,w80,w70,w60,w50,w40,w30,w20,w10。

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

 

测试点1:n=10000,m=2,w100=141

测试点2:n=40000,m=2,w100=283

测试点3:n=10000,m=3,w100=40

测试点4:n=40000,m=3,w100=63

测试点5:n=233333,m=3,w100=112

测试点6:n=50000,m=4,w100=34

测试点7:n=233333,m=4,w100=50

测试点8:n=666666,m=4,w100=64

测试点9:n=666666,m=5,w100=39

测试点10:n=2*10^7,m=8,w100=34

测试点11:n=2^31-1,m=10,w100=43

 

ljc:SPJ已更新

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

来源: 数据 by qq1010903229,SPJ by ljc