P2183 巧克力(二分答案)

Posted HWIM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2183 巧克力(二分答案)相关的知识,希望对你有一定的参考价值。

P2183 巧克力

题目描述

佳佳邀请了M个同学到家里玩。为了招待客人,她需要将巧克力分给她的好朋友们。她有N(1<=N<=5000)块巧克力,但是大小各不一样,第i块巧克力大小为为1*Xi(1<=i<=N,1<=Xi<=10000)

为了公平,她需要让每人所分得的巧克力大小一样,而且为了礼貌,巧克力是一整块地分给客人。所以她需要将巧克力分成大小为S的M块,而且使得S最大。但她很忙还要照顾她的客人,所以就将任务交给你了,你需要求出S。

输入输出格式

输入格式:

 

第一行,N,M

下接N行为N块巧克力的大小。

 

输出格式:

 

仅有一行,为巧克力大小S。

 

输入输出样例

输入样例#1:
Input.txt
   9 5
   1
   2
   3
   4
   5
   6
   7
   8
   9
输出样例#1:
 Output.txt
   5
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int a[5010];
 5 int main()
 6 {
 7     int n,m,l=1e9,r=0;
 8     scanf("%d%d",&n,&m);
 9     for (int i=1; i<=n; ++i)
10     {
11         scanf("%d",&a[i]);
12         l = min(l,a[i]);    //初始l,r 
13         r = max(r,a[i]);
14     }
15     while (l<=r)    //二分 
16     {
17         int mid = (l+r)>>1;
18         int sum = 0;
19         for (int i=1; i<=n; ++i)
20             sum += a[i]/mid;    //数一下能切几块 
21         if (sum>=m) l = mid+1;
22         else r = mid-1;
23     }
24     printf("%d",l-1);
25     return 0;
26 }

 

以上是关于P2183 巧克力(二分答案)的主要内容,如果未能解决你的问题,请参考以下文章

洛谷—— P2183 巧克力

[USACO10FEB]吃巧克力Chocolate Eating

蓝桥杯AcWing 题目题解 - 二分与前缀和差分

* ! THUSCH2017巧克力

LQ0138 分巧克力二分法

蓝桥杯最后一战