hdu3714 水三分
生活随笔
收集整理的這篇文章主要介紹了
hdu3714 水三分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ? 給你一些函數 y = ax^2 + bx + c,的a >= 0 的二次函數,x的范圍是0--1000,
問你在這個范圍內函數值最大的最小是多少,最大指的是對于某一個x最大的那個y,最小指的是全體的x范圍中最大的那個最小..
思路:
? ? ? 給你一些函數 y = ax^2 + bx + c,的a >= 0 的二次函數,x的范圍是0--1000,
問你在這個范圍內函數值最大的最小是多少,最大指的是對于某一個x最大的那個y,最小指的是全體的x范圍中最大的那個最小..
思路:
? ? ? 因為a>=0 所以都是開口向上的,如果話F(n) 的 xy( x<= 0 && x <= 1000),圖像肯定是單調或者凹性的,所以直接三分就行了..
#include<stdio.h> #include<math.h>#define eps 1e-9 #define N 10000 + 100 typedef struct {double a ,b ,c; }NODE;NODE node[N];double F(double x ,int n) {double ans = -1000000000;for(int i = 1 ;i <= n ;i ++){double y = node[i].a * x * x + node[i].b * x + node[i].c;if(ans < y) ans = y;}return ans; }double Search3(int n) {double low ,up ,mid ,mmid;low = 0 ,up = 1000;double dis1 ,dis2;while(1){mid = (low + up) / 2;mmid = (mid + up) / 2;dis1 = F(mid ,n);dis2 = F(mmid ,n);if(dis1 > dis2) low = mid;else up = mmid;if(up - low < eps) break;}return dis1; }int main () {int t ,n ,i;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);for(i = 1 ;i <= n ;i ++)scanf("%lf %lf %lf" ,&node[i].a ,&node[i].b ,&node[i].c);printf("%.4lf\n" ,Search3(n));}return 0; }
總結
以上是生活随笔為你收集整理的hdu3714 水三分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu3400 两重三分
- 下一篇: hdu4454 三分 求点到圆,然后在到