1. 程式人生 > >P2183 巧克力(二分答案)

P2183 巧克力(二分答案)

for using clas 小s input int out art ace

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 巧克力(二分答案)