藍橋杯真題 分巧克力 題解

2021-08-17 17:26:43 字數 1429 閱讀 9294

題目:

問題描述

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

思路:

列舉巧克力被分割的邊長,如果用for迴圈從1到(10)^5,則複雜度(10)^10>(10)^8,明顯超時..改用二分查詢

在判斷邊長為len時能否滿足條件時:求一塊長方形(h * w)最多被分成的正方形(len * len)巧克力個數為:

cnt = (h / len) * (w / len)

code:

#include 

#include

#include

using

namespace

std;

const

int maxn = 100010;

const

int maxl = 100010;

struct chocho[maxn];

int n,k;

//判斷能否將巧克力分成邊長為len的正方形k份以上

//能返回true,否則返回false

bool part(int len)

if(cnt >= k) return

true;

return

false;

}//尋找從[1,maxl]中能滿足分巧克力條件的最大的邊長

//尋找有序序列中最後乙個 滿足條件的位置

//尋找有序序列中第乙個不能滿足條件的位置-1

int solve(int left, int right)

else

}return left - 1;

} int main()

cout

<1, maxl)0;}

藍橋杯 分巧克力

兒童節那天有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的巧克力可...