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;
    }
  • 相关阅读:
    Maximum of lines in a DataBand
    "New page after" by code
    How to show out three rows from the same databand On A4?
    Asp.Net Core 第07局:路由
    Asp.Net Core 第06局:中间件
    Asp.Net Core 第05局:读取配置
    Asp.Net Core 第04局:依赖注入
    POJ-1003
    ORACLE 存储过程实例 [备忘录]
    关于操作有符号数的溢出问题
  • 原文地址:https://www.cnblogs.com/luyouqi233/p/8005665.html
Copyright © 2011-2022 走看看