洛谷—— P2183 巧克力

https://www.luogu.org/problemnew/show/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 <algorithm>
 2 #include <cstdio>
 3 
 4 inline void read(int &x)
 5 {
 6     x=0; register char ch=getchar();;
 7     for(; ch>'9'||ch<'0'; ) ch=getchar();
 8     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
 9 }
10 
11 int n,m,a[5005];
12 
13 int L,R,Mid,ans;
14 inline bool check(int x)
15 {
16     int cnt=0;
17     for(int i=n; i; --i)
18     {
19         if(cnt>=m) return 1;
20         cnt+=a[i]/x;
21     }
22     return false;
23 }
24 
25 int Presist()
26 {
27     read(n),read(m);
28     for(int i=1; i<=n; ++i) read(a[i]);
29     std:: sort(a+1,a+n+1);
30     for(R=a[n]; L<=R; )
31     {
32         Mid=L+R>>1;
33         if(check(Mid))
34         {
35             ans=Mid;
36             L=Mid+1;
37         }
38         else R=Mid-1;
39     }
40     printf("%d
",ans);
41     return 0;
42 }
43 
44 int Aptal=Presist();
45 int main(int argc,char**argv){;}
原文地址:https://www.cnblogs.com/Shy-key/p/7875077.html