資源限制
時間限制:1.0s 記憶體限制:256.0mb
問題描述
兒童節那天有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 <???>
不能通過工程設定而省略常用標頭檔案。
提交程式時,注意選擇所期望的語言型別和編譯器型別。
大致思路
列舉。直接用每一塊的面積 / 每一次可以分出的塊數。中途用二分查詢維護塊數並更新區間,可以節約些時間。(其實似乎不用二分也能過,但是有優化總歸是靠譜的)
一上來我的思路其實是找到全部巧克力的最小邊長,然後從這個最小邊長開始,用每塊巧克力的兩個邊分別 / 這個最小邊長並再乘起來計數,一旦計數器越界(大於等於k)即找到,否則邊長自減。
這樣做有乙個問題:實際上有些邊長很小的巧克力它完全可以派不上任何用場好不好!而且這個方法的時間複雜度貌似並沒有二分低。
**
#include
using
namespace std;
int h[
100005
],w[
100005];
intmain()
}if(flag)
l=m;
else
r=m;
}//l為最終要找的結果
cout
}
藍橋杯 分巧克力
兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同 例如一塊6x5的巧克力可...
藍橋杯 分巧克力
時間限制 1 sec 記憶體限制 128 mb 提交 27 解決 11 難度 標籤 基礎 提交 狀態 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分...
藍橋杯 分巧克力
兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同 例如一塊6x5的巧克力可...