私の将来の見直し半分に問題に公開された簡単な解決策 水中グー値ところで
我々はすぐに時間t cおよびd [i]は、S [i]の間の関係を見つけることができるようになります質問の意味に従って、この質問を参照して、何?
そして、しません だから私は、ハーフ半列挙答えを考えて、答えはこれまでに、注釈付きコードに近くなっています
#include <iostreamの> する#include <cstdioを> する#include <CStringの> 使用して 名前空間STD; ダブル D [ 100000 ]、S [ 100000 ]; int型N-、T; BOOLのチェック(ダブルX){ ダブル SUM = 0 ; のため(登録INT I = 1 ; I <= N-であり; I ++ ){ ダブル M = Sで[I]は+ X; // 計算速度列挙 IF(mは<=は0)戻り 0 ; // 合計速度は、それが不可能である0以上であります 和+ = D [I] / M。// 累積時間 } IF(SUM <= T)リターン 1。 ; // 時間は合計時間未満である場合、実行可能な 他 戻り 0 ; } int型(メイン){ int型Iは、Jを、 一方(〜scanfの(" %Dの%のD "、・N-、&T)){ ダブルANS; ダブル L = - 20000000、R&LT = 20000000 ; // 約列挙セクション のための(I = 1 ; I <= N; Iは++ ) scanfの(「%% LF LF"、&D [i]は、&S [i]は); のため(i = 1 ; iが= < 100 ; iは++ ) { ダブルミッド=(L + R)/ 2 ; 場合(チェック(MID)){ ANS = ミッド; R =ミッド; // 如果答案可行、储存 } そうでなければ、L = ミッド; } のprintf(" %.9lfする\ n " 、ANS); } 戻り 0 ; }