洛谷 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
传送门

思路:二分查找

#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);
}

 



posted @ 2017-08-09 16:58  Alex丶Baker  阅读(168)  评论(0编辑  收藏  举报