分巧克力 二分)

2021-10-03 02:45:09 字數 1543 閱讀 4480

題目如下

兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。 小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。 為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足:

1. 形狀是正方形,邊長是整數  

2. 大小相同

例如一塊6x5的巧克力可以切出6塊2x2的巧克力或者2塊3x3的巧克力。

當然小朋友們都希望得到的巧克力盡可能大,你能幫小hi計算出最大的邊長是多少麼?

輸入 第一行包含兩個整數n和k。(1 <= n, k <= 100000) 以下n行每行包含兩個整數hi和wi。(1 <= hi, wi

<= 100000) 輸入保證每位小朋友至少能獲得一塊1x1的巧克力。

輸出 輸出切出的正方形巧克力最大可能的邊長。

樣例輸入:

2 10

6 55 6

樣例輸出: 2

資源約定: 峰值記憶體消耗(含虛擬機器) < 256m cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

注意: main函式需要返回0; 只使用ansi c/ansi c++ 標準; 不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include 不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

解題思路:

1.首先明確一塊巧克力分隔成邊長為n的正方形能分成多少個,為(h[i]/n)*(w[i]/n)

2.看到這道題就想到了二分,首先要找出最大分割的邊長,然後從大到小依次檢查能否分隔成那麼多塊。

3.總的複雜度為o(nlogn)

為什麼不能用o(n^2)?

because 當代計算機1s內可做10^7左右次計算,資料最大不能超過3000,由題可知資料最大100000。

4.二分的判斷條件當然就是根據題意所示,判斷當分割成長為n的正方形是否能分隔出能滿足的塊數。

**如下

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1e5+5;

int h[maxn]

,w[maxn]

;int n,k;

bool

solve

(int n)

if(res >= k)

return

true

;else

return

false;}

intmain()

printf

("%d\n"

,low);}

return0;

}

後續給出二分模板原理以及適用條件以及何時適用吧~

歡迎指正~

分巧克力 (二分)

問題描述 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同 例如一塊6x5...

藍橋 分巧克力(二分)

問題描述 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同 例如一塊6x5...

分巧克力(二分查詢)

題目 分巧克力 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同 例如一塊...