题目描述
佳佳邀请了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
传送门
思路:二分查找
#include<iostream> #include<cmath> #include<cstdio> using namespace std; int n,f; double l,r,s; long double a[100001]; const double pi=acos(-1.0); int js(long double x) { int ans=0; for(int i=1;i<=n;i++) { if(ans>=f) return 0; else { ans+=floor(a[i]/x); } } if(ans<f) return 1; return 0; } int main() { cin>>n>>f; for(int i=1;i<=n;i++) { cin>>a[i]; if(a[i]>r) r=a[i]; } while(r-l>1e-5) { long double m=(l+r)/2; if(js(m)) r=m; else l=m; } printf("%d",(int)r); }