兒童節那天有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
本題屬於二分。
#include
#define i scanf
#define ol puts
#define o printf
#define f(a,b,c) for(a=b;a#define ff(a,b) for(a=0;a#define fg(a,b) for(a=b-1;a>=0;a--)
#define len 100010
#define max 0x06ffffff
#define v vector
#define ll long long
using
namespace
std;
typedef
struct nodenode;
node ck[len];
int n,k;
int calc(int x)
return ans;
}int main()
int l=1,r=100000+1,mid;
while(l2;
int cks=calc(mid);
if(cks>=k)else
}o("%d\n",l-1);
return
0;
}
這裡給出的**應該屬於二分中的upper_bound
型別,即找到第乙個大於指定元素的索引:
int l=0; //初始化 l ,為第乙個合法位址
int r=10; //初始化 r , 位址的結束位址
int mid;
while(l2;
if(arr[mid]>obj)else
}
改寫本題**為上文標準形式,也可以ac:
while(l2;
int cks=calc(mid);
if(cks//範圍左移
r=mid;
}else
}
藍橋杯 分巧克力
兒童節那天有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的巧克力可...