二分三分

HDU 2274

三分 求这些二次函数最大值最小 

反正三分能求吧 

#include <iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<math.h>

using namespace std ;

#define e 2.7182818284
#define LL __int64
#define MAXN 20010
#define inf  1000000000

struct para
{
    int a,b,c;
}pa[MAXN];
int n;

double f1(double a)
{
    double m1=-inf;
    for(int i=1;i<=n;i++)
    {
        if(pa[i].a*a*a+pa[i].b*a+pa[i].c>m1)
            m1=pa[i].a*a*a+pa[i].b*a+pa[i].c;
    }
    return m1;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d%d",&pa[i].a,&pa[i].b,&pa[i].c);
        double ll,rr;
        ll=0;
        rr=1000;
        while(rr-ll>1e-9)
        {
            double l,r;
            l=ll+(rr-ll)/3;
            r=ll+2*(rr-ll)/3;
            if(f1(r)>f1(l))
                rr=r;
            else
                ll=l;
        }
        printf("%.4lf\n",f1(ll));
    }
    return 0;
}
View Code

HDU 2289

给你一些量  算出杯子里面水的高度

二分就行 

 

#include <iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<math.h>

using namespace std ;

#define e 2.7182818284
#define LL __int64
#define MAXN 20010
#define inf  1000000000

double pi  = 4*atan(1.0);
double r,R,h,v;
double f(double a)
{
    double r1=(R-r)*a/h+r;
    return a*pi*(r*r+r*r1+r1*r1)/3;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        double l1,r1;
        scanf("%lf%lf%lf%lf",&r,&R,&h,&v);
        l1=0;
        r1=h;
        while(r1-l1>1e-9)
        {
            double mid=(l1+r1)/2;
           // printf("%lf %lf\n",L,R);
            if(f(mid)>v)
                r1=mid;
            else
                l1=mid;

        }
        printf("%.6lf\n",l1);
    }
    return 0;
}
View Code

 

posted on 2017-03-02 20:00  HelloWorld!--By-MJY  阅读(173)  评论(0编辑  收藏  举报

导航