poj 1064

二分穷竭搜索,像这种f(x)随x变化的问题,就用这种方法,其实。。。。。我也不大懂,这里错的原因就是精度问题,加个0.005就可以了,比较简单,虽然我错了n次

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e5+10;
int n,k;
int res;
int a[maxn];
bool cc(int d)
{   int sum=0;
    for(int i=0;i<n;i++)
        sum+=a[i]/d;
    return sum>=k;
}
int main()
{     res=0;
    scanf("%d%d",&n,&k);
    int maxi=0;
    for(int i=0;i<n;i++)
    {
        double m;
        scanf("%lf",&m);
        a[i]=(m+0.005)*100;
        maxi=max(maxi,a[i]);
    }
   long long int l=1,r=maxi;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(cc(mid))
        {
            res=max(res,mid);
            l=mid+1;
        }
        else r=mid-1;
    }
    printf("%.2f\n",res*0.01);
    return 0;
}

 

posted on 2017-04-11 17:14  发牌员  阅读(93)  评论(0)    收藏  举报

导航