分巧克力 二分法

2021-08-16 02:24:03 字數 1475 閱讀 7966

兒童節那天有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 5

5 6

樣例輸出:

2資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 1000ms

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

注意:main函式需要返回0;

只使用ansi c/ansi c++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

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

提交程式時,注意選擇所期望的語言型別和編譯器型別。分析:首先想到的是暴力,但是全部乙個個遍歷的話時間為n^2;肯定超時。以往我做過的簡單二分法只是要我們在乙個陣列中找乙個確定的值,現在題目要找的是盡可能大的那個數,二分法之後還有乙個中間層judge來判斷mid分給誰,和以前二分法不一樣的是,遇到等於退出的機率很小,且這裡不是直接等於,而是通過中間分巧克力演算法去判斷,可以說一般都是要二分到最後,然後去乙個最大的可選值輸出。除了迴圈第一次這裡start總表示可分,end一側總表示不可分

#includeusing namespace std;

typedef struct size

cho,*chop;

cho cho[100001];

int n, k;

bool judge(int mid)

if(sum >= k)

else }

int main()

end = 100000;

start = 1;

while(start < end-1)

else

}cout << start;

system("pause");

return 0;

}

藍橋杯 分巧克力 二分法

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

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...