私は通信船の問題を解決するための最も効率的なアルゴリズムを作ろうとしています。
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.0 ではなく 2.25 を返す、またはオーバーフロー検出の問題)。 .
だから私のアルゴリズムは次のとおりです。
- 読み取り値
- それらを変換する
(altitude of bottom, altitude of top, area)
qsort (altitude of bottom)
SURFACE = (lowest + highest place)/2
- 下から下までの体積を計算する
SURFACE
- ボリュームは目的のボリュームと同じですか (エラー 0.000001 を許可)? 希望のボリュームよりも大きいか小さいか?
- 大きい場合は下半分を取り、プロセスを繰り返します。小さい場合は上半分を取り、計算されたボリュームを保存し、プロセスを繰り返します。
理解できることを願っています。
これを解決するためのより良い方法はありますか? または、私の方法を改善する方法は?
入力の画像: