藍橋杯 分巧克力(Java)
題目描述
兒童節那天有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
思路分析:
瞭解到這道題大多人是選擇類二分查詢,我是利用了嘗試法去暴力列舉,假設我以邊長1去切,看所有巧克力切完後是否滿足要求,如果滿足則再以邊長2去切,一直迴圈嘗試,直到累加到邊長為n時發現巧克力不夠切了,那麼最大的分割邊長就一定是n-1。
package 藍橋杯;
import java.util.*;
public class 分巧克力 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[][] qkl = new int[n][2];
int size = 1;
//儲存所有巧克力資訊
for(int i = 0;i < n;i++) {
qkl[i][0] = in.nextInt();
qkl[i][1] = in.nextInt();
}
int flag = 0;
int sum = 0;
//遍歷以當前邊計算,能否滿足
while(true) {
sum = 0;flag = 0;
for(int i = 0;i < n;i++) {
int a = qkl[i][0];//表示長
int b = qkl[i][1];//表示寬
sum += (a/size)*(b/size);//當前塊以當前尺寸分能分多少塊
if(sum >= k) {
size++;
flag = 1;
break;
}
}
if(flag == 0)
break;
}
System.out.print(size-1);
}
}
相關文章
- 藍橋杯-分巧克力
- 2017年藍橋杯A組-分巧克力(整數二分)
- 藍橋杯-帶分數
- 藍橋杯
- 藍橋杯例題-快速分揀
- Java藍橋杯14年第五題Java
- 藍橋杯 (java) 第39級階梯Java
- 藍橋杯之帶分數(全排列+暴力)
- 藍橋杯 買瓜
- 藍橋杯-N皇后
- 藍橋杯真題
- 藍橋杯 剪格子
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- 閒聊藍橋杯JAVA - 生成迴文數Java
- 藍橋杯-M次方根(實數二分)
- 藍橋杯-長草(BFS)
- 藍橋杯-螞蟻感冒
- 藍橋杯-翻硬幣
- 藍橋杯-座次問題
- 藍橋杯-日期問題
- 藍橋杯 計算方程
- 藍橋杯-排列序數
- 如何準備藍橋杯
- 藍橋杯年號字串字串
- 藍橋杯考點整理
- 藍橋杯訓練2
- 藍橋杯 整數拼接
- 藍橋杯注意的地方
- 藍橋杯 (java)演算法訓練 數對Java演算法
- 藍橋杯-跳石頭(二分法)
- 藍橋杯學習路線
- 藍橋杯——查詢的妙趣
- 藍橋杯——巧妙地遞迴遞迴
- 藍橋杯-走迷宮(BFS)
- 藍橋杯-地宮取寶
- 藍橋杯-波動數列
- 藍橋杯-k倍區間
- 太陽(藍橋杯14屆)