poj3122 Pie 二分法 貪心思想

2022-08-13 08:09:15 字數 1320 閱讀 9369

一,題意:

有f+1個人(包括自己),n塊披薩pie,給你每塊pie的半徑,要你公平的把盡可能多的pie分給每乙個人

而且每個人得到的pie來自乙個pie,不能拼湊,多餘的邊角丟掉。

二,思路:

1,輸入,並找出最大體積的pie

2,二分法記錄每一種情況的體積,及能分給幾個人,

貪心的思想:

先取能分給n-1個人的最大體積,逐漸減少每份pie的體積

直到最接近n個人都能獲得的pie的最大的體積

3, 輸出。

三,步驟:

1,輸入,max儲存最大的pie體積

2,二分法:

i,退出條件max-min <= 1e-6;

由n-1個人體積慢慢減少,逐漸接近n個人的體積,

最後mid儲存的pie體積即為每個人分得的最大體積。

ii,count記錄pie能分的份數

iii, 如果份數 < 人數,減少每份pie的體積,即max = mid ; mid = (min+max)/2;

否則,增加每份pie的體積,即min = mid ; mid = (min+max)/2;

3,輸出:注意控制輸出的小數字數。

setprecision、fixed、showpoint的用法總結:

1 #include2 #include3

using

namespace

std;

4const

double pi = 3.14159265359; //

這是最短的pi長度,再短就wa了

5const

double esp = 1e-6; //

為了double二分法設定的最小精度限制值

6double pie[10050

]; 7

8int

main()

21double min = 0.0 ; //

注意改為0,會出錯

22double

mid ;

23while(max-min>esp)

29if(count < f) max = mid ; //

mid偏大

30else min = mid ; //

mid偏小

31//

cout/

輸出一下,你會發現其中的奧妙。 32}

33 cout<

<4)/

fixed與setprecision配合使用規定小數點後的位數 34}

35return0;

36 }

view code

poj 3122 Pie 二分查詢

很簡單的二分 入門級的二分 水一下 這種題的意思對乙個區間內的值進行二分查詢,每次判斷是否滿足條件 其實 我的這個 還不完善,有幾步 廢操作,看似優化,實則拉高複雜度 留給入門的小夥伴思考吧 include include include includeusing namespace std con...

二分查詢 POJ 3122 Pie

有n張餅,k個朋友,為了體面,必須把餅切割成大小一樣的k 1塊 包括主人自己 求出每個人能得到的最大餅體積。前提 每人一塊,餅可以有剩餘 二分去暴力答案,確定下界為0,上界為最大體積的餅 每人一塊,最大可能就是餅的體積都相等,也就是每塊都是最大值 include include define max...

POJ3122 Pie 二分答案

有n個派,f 1個人,每個人分到的體積要相等,而且每個人只能有一塊派。二分答案,對於乙個mid,對每個派進行檢測,盡量的多分,然後如果份數比f 1大,說明mid可以更大,就把mid給low。注意份數等於f 1時,也要向大的地方靠近。二分答案的題都是這樣的套路。這種題精度是乙個大坑。總是在wa和t之間...