• 1435:【例题3】曲线


    1435:【例题3】曲线


    时间限制: 1000 ms         内存限制: 65536 KB
    提交数: 255     通过数: 140 

    【题目描述】

    明明做作业的时候遇到了n个二次函数Si(x)= ax2 + bx + c,他突发奇想设计了一个新的函数F(x) = max(Si(x)), i = 1...n.

    明明现在想求这个函数在[0,1000]的最小值,要求精确到小数点后四位四舍五入。

    【输入】

    输入包含T 组数据 (T < 10) ,每组第一行一个整数 n(n ≤ 10000) ,之后n行,每行3个整数a (0 ≤ a ≤ 100), b (|b| ≤ 5000), c (|c| ≤ 5000) ,用来表示每个二次函数的3个系数,注意二次函数有可能退化成一次。

    【输出】

    每组数据一个输出,表示新函数F(x)的在区间[0,1000]上的最小值。精确到小数点后四位,四舍五入。

    【输入样例】

    2
    1
    2 0 0
    2
    2 0 0
    2 -4 2

    【输出样例】

    0.0000
    0.5000

    【提示】

    【数据范围】

    T < 10, n ≤ 10000 , 0 ≤ a ≤ 100,|b| ≤ 5000, |c| ≤ 5000

    前50%数据n ≤ 100

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<iomanip>
    using namespace std;
    int T,test,n;
    double a[10005],b[10005],c[10005];
    double x,maxx=0,L,r,Lmid,rmid;
    double cal(double x){
        int i,j;
        double maxx=-0x7fffffff;
        for(i=1;i<=n;i++) maxx=max(maxx,a[i]*x*x+b[i]*x+c[i]);
        return maxx;
    } 
    int main(){
        int i,j;
        cin>>T;
        for(test=1;test<=T;test++){
            cin>>n;
            for(i=1;i<=n;i++) cin>>a[i]>>b[i]>>c[i];
            L=0;r=1000;
            while(L+1e-11<r){
                Lmid=L+(r-L)/3;
                rmid=r-(r-L)/3;
                if(cal(Lmid)<=cal(rmid)) r=rmid;
                else L=Lmid;
            }
            printf("%.4lf
    ",cal(L));
        }
        return 0;
    }
  • 相关阅读:
    c++笔记--数组对象、vector对象和构造函数
    马加爵之歌
    周末有同学要来
    IQ
    [转]JavaScript中typeof 讲解
    【转】JS兼容Firefox
    firefox与ie 的javascript区别
    关于委托(转)
    经典常用的javascript代码收藏
    关于DataList使用DropDownList的分页实现 技巧实例源码
  • 原文地址:https://www.cnblogs.com/yfr2zaz/p/10413584.html
Copyright © 2020-2023  润新知