题目描述
小明为了掩护大部队,单枪匹马同敌人周旋,后来被敌人包围在某山头……等等,为什么怎么听怎么像狼牙山五壮士!不过不用着急,这次小明携带了足够的弹药,完全可以将涌上来的敌人一个一个干掉。小明是个神枪手,只要他的枪膛中有子弹,他就能将在他射程m(用从敌人位置到山头的直线距离算)以内的一个敌人瞬间射杀。但如果在射程内没有敌人,出于节约子弹考虑和面子问题,小明会等待敌人靠近然后射击。
正当小明为自己的强大而自我膨胀时,他忽然发现了一个致命的失误:他携带的枪是单发枪,每射出一发子弹都必须花k秒钟的时间装子弹。而凶残的敌人才不会花时间等你换子弹呢。他们始终在以1m/s的速度接近山头。而如果在一个敌人到达山头时小明无法将他击毙,那么我们可怜的小明就将牺牲在敌人的刺刀下。现在小明用心灵感应向你发出求助:要保住自己的性命并且歼灭所有敌人,小明最多只能用多少时间给枪装上一发子弹?
说明:假设一开始小明的枪中就有一发子弹,并且一旦确定一个装弹时间,小明始终会用这个时间完成子弹的装卸。希望你能帮助小明脱离险境。
输入格式
每组输入数据,第一行有两个整数n和m,(2≤n≤100,000; 1≤m≤10,000,000)n代表敌人个数,m代表小明的射程。
接下来有n行,每行一个整数mi,(1≤mi≤10,000,000),代表每个敌人一开始相对山头的距离(单位为米)。
输出格式
每组输出数据仅有一个整数,代表小明的换弹时间(单位为秒)。
样例输入
6 100
236
120
120
120
120
120
样例输出
25
思路:本题主要考查二分法的使用,每次假设一个射击间隔时间,然后对其进行判断(自定义check函数),函数內可以先定义自己的位置为temp(敌人的移动可以相对为自己的移动),如果敌人与自己的距离不大于射程就可以射杀敌人,敌人数量减一,最后如果能全杀死说明这个设计间隔时间满足题意,记录下来,定义其为二分下界,但若敌人的位置小于自己的

本文介绍了一道编程题目,小明需要在敌人逼近山头时利用二分法策略找到最佳装弹时间以消灭所有敌人,同时确保自身安全。题目涉及二分搜索算法,输入包括敌人数量和射程,输出为最小装弹时间。通过定义检查函数判断不同装弹时间是否可行,最终找到满足条件的装弹间隔。
最低0.47元/天 解锁文章
439

被折叠的 条评论
为什么被折叠?



