zoukankan      html  css  js  c++  java
  • CF549H:Degenerate Matrix ——题解

    https://vjudge.net/problem/CodeForces-549H

    ————————————————————————

    题目大意:给一个矩阵,每个数可以加任意的数使得该矩阵为退化矩阵(ad-bc=0),求每个数加的数的绝对值最大的最小值。

    ————————————————————————————

    这题坑在看不懂题……

    题解参考这个:http://blog.csdn.net/qq_26122039/article/details/53120339

    这里再重新叙述一下吧:

    首先二分最大值mid,这样每个数都可以最大上下浮动mid。

    我们求出来这种情况下ad和bc的取值范围,只要他们的取值范围相交,就一定能达到条件。

    ——————————————————————————————

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    const int M=10005;
    double ans,a,b,c,d;
    bool pan(double m){
        double a1=a+m;double a2=a-m;double b1=b+m;double b2=b-m;  
        double c1=c+m;double c2=c-m;double d1=d+m;double d2=d-m;  
        double t1=min(min(a1*d1,a1*d2),min(a2*d1,a2*d2));  
        double t2=min(min(b1*c1,b1*c2),min(b2*c1,b2*c2));  
        double x1=max(max(a1*d1,a1*d2),max(a2*d1,a2*d2));  
        double x2=max(max(b1*c1,b1*c2),max(b2*c1,b2*c2));
        if(t1<=x2&&t2<=x1)return 0;
        return 1;
    }
    void erfen(double l,double r){
        for(int i=1;i<=100;i++){
        double mid=(l+r)/2;
        if(pan(mid))ans=l=mid;
        else r=mid;
        }
        return;
    }
    int main(){
        cin>>a>>b>>c>>d;
        erfen(0,1e9);
        printf("%.10lf
    ",ans);
        return 0;
    }
  • 相关阅读:
    关于excel导入、导出(POI)
    关于上传图片和显示
    关于sql连接查询(内联、左联、右联、全联)
    关于面试问题
    关于excel导出
    响应式布局和自适应布局的不同
    关于时间范围查询
    HDU 6166 Senior Pan(二进制分组+最短路)
    HUAS 2017暑假第六周比赛-题解
    AtCoder Regular Contest 081
  • 原文地址:https://www.cnblogs.com/luyouqi233/p/8005665.html
Copyright © 2011-2022 走看看