Looksery Cup 2015 H. Degenerate Matrix

又学会了二分的新用法,

其实二分可以设置固定的二分次数作为跳出条件,当次数达到一定时,一定可以的到解,可以解决因精度而T的情况。

向群神致敬。

题目:http://codeforces.com/contest/549/problem/H

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
using namespace std;
typedef long long ll;
const double eps = 1e-9;
double t1[10],t2[10];

struct pp{
    double a,b;
}p[2];

int main(){
    double a,b,c,d;
    double high = 2*1e9,low = 0;
    cin>>a>>b>>c>>d;
    int co = 0;
    while(co <= 80){
        co++;
        double mid = (high+low)/2;
        double a1=a+mid , a2 = a-mid;
        double b1=b+mid , b2 = b-mid;
        double c1=c+mid , c2 = c-mid;
        double d1=d+mid , d2 = d-mid;

        t1[1] = a1*d1;t1[2]=a1*d2;t1[3]=a2*d1;t1[4]=a2*d2;
        t2[1] = c1*b1;t2[2]=c1*b2;t2[3]=c2*b1;t2[4]=c2*b2;

        sort(t1+1,t1+5);
        sort(t2+1,t2+5);

        p[0].a = t1[1],p[0].b=t1[4];
        p[1].a = t2[1],p[1].b=t2[4];

        if(p[0].a > p[1].a){
            pp tmp = p[1];
            p[1] = p[0];
            p[0] = tmp;
        }

        int fl=0;
        if(p[0].b >= p[1].a) fl=1;

        if(fl==1) high = mid;
        else low = mid;
    }
//    cout<<"hehe\n";
    printf("%.10f\n",low);
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值