トピックリンクします。https://vjudge.net/problem/POJ-3122
問題の意味:ケーキN、M + 1つの個体が存在するが、ケーキがブロックM + 1に分割し、各ブロックの最大サイズを見つけます。
思考:水、半分の各ブロックのサイズと明らかに多くの人々が二分性質を満たすモノトーンを食べることができます。0の下限値と上限値の和/(M + 1)。
ACコード:
#include <cstdioを> する#include <アルゴリズム> の#include <cmath> の#include <cstdlib> 使用して 名前空間STD。 const int型 MAXN = 1E4 + 5 。 CONST ダブル PI = ACOS( - 1 )。 INT T、N、M。 ダブル[MAXN]、合計; int型チェック(ダブルX){ int型 NUM = 0 。 以下のために(int型 I = N; I> = 1 ; - I){ NUM + = [I] / X。 もし(NUM> m)のブレーク; } 戻りNUM。 } int型のmain(){ scanf関数(" %のD "、&T)。 一方、(T-- ){ 和 = 0 。 scanf関数(" %d個の%のD "、&N、&M)。 M + = 1 ; 以下のために(int型 i = 1 ; iは= N <++ {I) のscanf(" %LFを"&[I])。 [I] = PI * [I] * [I]。 和+ = [I]。 } ソート(A + 1、A + N + 1 )。 ダブル L = 0.0、R =和/ M、ミッド。 一方、(L <= R){ 半ば =(L + R)/ 2 。 もし(チェック(MID)> = M)L =ミッド+(1E- 5 )。 そうでなければ R =ミッド(1E- 5 )。 } のprintf(" %.4fする\ n " 、R)。 } 戻り 0 。 }