我正在尝试制作最有效的算法来解决通信船只的问题。
Input:
Number of vessels (int, 1-200000)
For each vessel - altitude of vessel (int, can be negative)
height (int, >1)
width (int, >1)
depth (int, >1)
Volume of water (int >=0, read to EOF)
Output:
Altitude of water surface (double) or "Empty" or "Overflow"
我做了一个程序(用 C 语言),它使用二分法,但有时不能给出正确的结果(fe 容器 1 1 1 1 和 3 3 3 3 和体积 1 给出 2.25 而不是 2.0,或者溢出检测问题) .
所以我的算法是:
- 读取值
- 转换它们
(altitude of bottom, altitude of top, area)
qsort (altitude of bottom)
SURFACE = (lowest + highest place)/2
- 从底部到计算体积
SURFACE
- 音量是否等于所需音量(允许错误 0.000001)?是大于还是小于所需体积?
- 如果较大取下半部分并重复过程,如果较小取上半部分,则保存计算体积,重复过程。
我希望这是可以理解的。
有没有更好的方法来解决这个问题?或者如何改进我的方法?
输入图片: