装满水的气球
题目描述:
一年一度的新生周活动开始了,你们做好了一些装满水的气球,准备恶搞那些可怜的新生……
活动开始之前,你们突然发现一个问题:这些气球实在是太硬了,很难把它们打破(如果打不破,它们就没有任何意义了),甚至从好几层楼高的楼顶把它们扔到地面,也打不破。你的任务是,借助一个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
提示:
数据如下:
评分规则:
设当前n、m下最少的操作次数为w100,则w90=向下取整(w100*125%),w80=向下取整(w90*125%),w70=向下取整(w80*125%),以此类推。
如果你测试的次数≤w100,那么你能获得该测试点100分;否则如果你测试的次数≤w90,那么你能获得该测试点90分;否则如果你测试的次数≤w80,那么你能获得该测试点80分,以此类推;若你的测试次数>w10,则0分。
时间限制: 1000ms空间限制: 256MB
来源: by ljc