codeforces 549H Degenerate Matrix(二分)
2015-07-21 20:43
337 查看
Description
The determinant of a matrix
2 × 2 is defined as follows:
A matrix is called degenerate if its determinant is equal to zero.
The norm||A|| of a matrixA is defined as a maximum of absolute values of its elements.
You are given a matrix
. Consider any degenerate matrixB such that norm||A - B||
is minimum possible. Determine||A - B||.
Input
The first line contains two integers a andb (|a|, |b| ≤ 109), the elements of the first row of matrixA.
The second line contains two integers c andd (|c|, |d| ≤ 109) the elements of the second row of matrixA.
Output
Output a single real number, the minimum possible value of
||A - B||. Your answer is considered to be correct if its absolute or relative error does not exceed10 - 9.
Sample Input
Input
Output
Input
Output
Hint
In the first sample matrix B is
In the second sample matrix B is
题目大意:定义||A||为矩阵A中的数的绝对值最大的那个值。要求找到一个矩阵B,使得||A-B||的值最小并且输出这个值。
我们可以假设要求的值最大为t。可以对差值进行二分查找。
The determinant of a matrix
2 × 2 is defined as follows:
A matrix is called degenerate if its determinant is equal to zero.
The norm||A|| of a matrixA is defined as a maximum of absolute values of its elements.
You are given a matrix
. Consider any degenerate matrixB such that norm||A - B||
is minimum possible. Determine||A - B||.
Input
The first line contains two integers a andb (|a|, |b| ≤ 109), the elements of the first row of matrixA.
The second line contains two integers c andd (|c|, |d| ≤ 109) the elements of the second row of matrixA.
Output
Output a single real number, the minimum possible value of
||A - B||. Your answer is considered to be correct if its absolute or relative error does not exceed10 - 9.
Sample Input
Input
1 2 3 4
Output
0.2000000000
Input
1 0 0 1
Output
0.5000000000
Hint
In the first sample matrix B is
In the second sample matrix B is
题目大意:定义||A||为矩阵A中的数的绝对值最大的那个值。要求找到一个矩阵B,使得||A-B||的值最小并且输出这个值。
我们可以假设要求的值最大为t。可以对差值进行二分查找。
#include<stdio.h> #include<math.h> #include<string.h> double a,b,c,d; double min(double a,double b) { if(a>b)return b; else return a; } double max(double a,double b) { if(a>b)return a; else return b; } int main() { int i,j,n,k; double t1,t2,x1,x2; double a1,a2,b1,b2,c1,c2,d1,d2; while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d)!=EOF) { double t; double l=0,r=1000000000,mid; for(i=0;i<100000;i++) { mid=(l+r)/2; a1=a+mid;a2=a-mid;b1=b+mid;b2=b-mid; c1=c+mid;c2=c-mid;d1=d+mid;d2=d-mid; t1=min(min(a1*d1,a1*d2),min(a2*d1,a2*d2)); t2=min(min(b1*c1,b1*c2),min(b2*c1,b2*c2)); x1=max(max(a1*d1,a1*d2),max(a2*d1,a2*d2)); x2=max(max(b1*c1,b1*c2),max(b2*c1,b2*c2)); if(t1<=x2&&t2<=x1)r=mid; //如果条件成立,表明我搜索的值还太大,需要缩小范围。 else l=mid; //表示搜索的值已经太小了 } printf("%.11f\n",l); } return 0; }
相关文章推荐
- poj 2366 Sacrament of the sum
- Ubuntu14安装mysql命令
- NodeJS 、Express4.x、Jade使用方法
- 菩提偈
- java 它 引用(基本类型的包装,构造函数和析构函数c++不同)
- 暑假集训第二周——贪心 盒子平移
- 解诀System.exit(1)退出太快的题
- B+树
- 基于Multisim的boost升压斩波电路仿真
- Record-2-5
- 二分查找
- Shortest path of the king
- http协议:http请求、http响应、间隔时间跳转页面、禁用浏览器缓存
- To and Fro
- OC05 -- 数组
- 快速傅里叶变换(FFT)的C#实现及详细注释
- Record-2-4
- 今年暑假不AC
- 关于java基础--排序方法
- [CareerCup] 2.6 Linked List Cycle 单链表中的环