poj 1064 二分控制精度

来源:互联网 发布:魔兽世界服务端源码 编辑:程序博客网 时间:2024/06/05 07:18

自己的读题能力是真的差,读题不会,精度题目说了0.01,自己还写错,其实这个题就是一个二分,找数的。

用一下floor还有注意精度

#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <queue>#include <algorithm>#include <vector>#include <math.h>using namespace std;const int maxn = 10000 + 20;const int INF = 0x3f3f3f3f;int N,K;double p[maxn];int judge(double mid){    int cur = 0;    for(int i = 0; i < N; i++)    {        cur += int(p[i] / mid);    }    return cur >= K;}int main(){    int num;    scanf("%d%d",&N,&K);    for(int i = 0; i < N; i++)    {        scanf("%lf",&p[i]);    }    double left = 0;    double right = INF;    while(right - left > 0.001)//一定要注意精度,不过有的哥们说直接循环100次就搞定了,想想也是,都可以,自己这里错了很多遍    {        double mid = (right + left) / 2;        if(judge(mid))        {            left = mid;        }        else        {            right = mid;        }    }    printf("%.2lf\n",floor(right * 100) / 100);    return 0;}


原创粉丝点击