zoukankan      html  css  js  c++  java
  • 曲线(三分)

    明明做作业的时候遇到了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个系数,注意二次函数有可能退化成一次。

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

    输出

     

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

    样例输入

     

    样例输出

    解题思路:最大值的最小 三分裸体

     

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int t,n;
     5 double a,b,c;
     6 double arr[10005],brr[10005],crr[10005];
     7 
     8 double solve(double x){
     9     double minn=arr[1]*x*x+brr[1]*x+crr[1];
    10     for(int i=2;i<=n;i++){
    11         minn=max(minn,arr[i]*x*x+brr[i]*x+crr[i]);
    12     }
    13     return minn;
    14 }
    15 
    16 double calculation(double left,double right){
    17     double eps=1e-9;
    18     while(left+eps<right){
    19         double midleft=left+(right-left)/3.0;
    20         double midright=right-(right-left)/3.0;
    21         if(solve(midleft)<=solve(midright)){
    22             right=midright;
    23         }
    24         else left=midleft;
    25     }///
    26 //    printf("%.4f
    ",left);
    27     return solve(left);
    28 }
    29 
    30 int main(){
    31 //    ios::sync_with_stdio(false);
    32     cin>>t;
    33     while(t--){
    34         cin>>n;
    35         for(int i=1;i<=n;i++) cin>>arr[i]>>brr[i]>>crr[i];
    36         printf("%.4f
    ",calculation(0.0,1000.0));
    37     }
    38     return 0;
    39 }
    View Code

     

  • 相关阅读:
    Object类学习
    Thread.State 线程状态
    Thread.UncaughtExceptionHandler
    apply和call的区别
    如何实现border-width:0.5px;
    table固定头部,表格tbody可上下左右滑动
    canvas画布实现手写签名效果
    ES6学习笔记
    for循环中执行setTimeout问题
    javaScript函数提升及作用域
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/11255712.html
Copyright © 2011-2022 走看看