Error Curves

Time Limit:3000MS    Memory Limit:0KB    64bit IO Format:%lld
& %llu

Appoint description:

Description


Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a method called Linear Discriminant Analysis, which has many interesting properties.

In order to test the algorithm's efficiency, she collects many datasets. What's more, each data is divided into two parts: training data and test data. She gets the parameters of the model on training data and test the model on test data.

To her surprise, she finds each dataset's test error curve is just a parabolic curve. A parabolic curve corresponds to a quadratic function. In mathematics, a quadratic function is a polynomial function of the formf(x) = ax2 + bx + c.
The quadratic will degrade to linear function ifa = 0.

It's very easy to calculate the minimal error if there is only one test error curve. However, there are several datasets, which means Josephina will obtain many parabolic curves. Josephina wants to get the tuned parameters that make the best performance
on all datasets. So she should take all error curves into account, i.e., she has to deal with many quadric functions and make a new error definition to represent the total error. Now, she focuses on the following new function's minimal which related to multiple
quadric functions.

The new function F(x) is defined as follow:

F(x) = max(Si(x)), i = 1...n. The domain ofx is [0, 1000].Si(x) is a quadric function.

Josephina wonders the minimum of F(x). Unfortunately, it's too hard for her to solve this problem. As a super programmer, can you help her?

Input

The input contains multiple test cases. The first line is the number of cases
T
(T < 100). Each case begins with a number n(n ≤ 10000). Followingn lines, each line contains three integersa (0 ≤
a ≤ 100),b (|b| ≤ 5000), c (|c| ≤ 5000), which mean the corresponding coefficients of a quadratic function.

Output

For each test case, output the answer in a line. Round to 4 digits after the decimal point.

Sample Input

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

Sample Output

0.0000
0.5000

大致题意:给了好多抛物线f(i)的a[i], b[i],  c[i], 定义F (i)= max(f(i)) , 求F(x)在区间【0,1000】上的最小值。

解题思路:因为题中给出的a>=0, 所以a有可能为零,此时曲线为直线。否则曲线为开口向上的抛物线,故为下凸函数,所以F(x)也为下凸函数。故可用三分法求F(x)的极值。先算出F(x)的详细值,然后就可直接三分了。详见代码

AC代码:

#include <cstdio>
#include <algorithm>
using namespace std; const int maxn = 10000 + 10;
int n, a[maxn], b[maxn], c[maxn]; double f(double x){ //求F(x)
double ans = a[0]*x*x + b[0]*x + c[0];
for(int i=1; i<n; i++){
ans = max(ans, a[i]*x*x+b[i]*x+c[i]);
}
return ans;
} int main(){
// freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--){
scanf("%d", &n);
for(int i=0; i<n; i++)
scanf("%d%d%d", &a[i], &b[i], &c[i]);
double l = 0, r = 1000; //三分求极值
for(int i=0; i<100; i++){
double mid = l + (r-l)/3;
double midmid = r - (r-l)/3;
if(f(mid) < f(midmid)) r = midmid;
else l = mid;
}
printf("%.4lf\n",f(l));
}
return 0;
}

最新文章

  1. 本地wampserver如何配置伪静态
  2. Nginx+Php-fpm+MySQL+Redis源代码编译安装指南
  3. mysql有回滚,php没有回滚的说法
  4. BroadcastReceiver的简介
  5. mysql innoDB 与 myISAM
  6. 转载 SQL Server 2008 R2 事务与隔离级别实例讲解
  7. Weibo Crawler in Action
  8. 高质量、处于持续更新的R包
  9. Core Python Notes
  10. cf494A Treasure
  11. DataTables获取表单输入框数据
  12. BZOJ 2300: [HAOI2011]防线修建( 动态凸包 )
  13. Python爬虫爬取qq视频等动态网页全代码
  14. 恐怖的ifdown eth0;0
  15. centos上网络服务起不来network.service failed
  16. FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息
  17. 取代iframe,实现页面中引入别的页面
  18. [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现
  19. python3 爬取简书30日热门,同时存储到txt与mongodb中
  20. 配置apache-maven-3.6.0时所遇到的坑(一)

热门文章

  1. SQL 插入多行数据语句整理
  2. 洛谷 P2678 跳石头【经典二分答案/贪心】
  3. CF 915 D 拓扑排序
  4. (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)
  5. pthread条件变量
  6. cnblogs的代码高亮
  7. [Codeforces 8E] Beads
  8. 前端基础-HTML标记语言
  9. 6.3(java学习笔记)缓冲流
  10. Shell中 调用/引用/包含 另外的脚本文件的两种方法