zoukankan      html  css  js  c++  java
  • CF549H Degenerate Matrix

    传送门

    Time cost:45min

    这题还是比较简单的(然后机房就把这个题刷成了AC率100%...)

    首先这个题有显然的二分性:小的成立大的一定成立 大的不成立小的一定不成立

    观察样例和题意 考虑答案为x的情况 如果我们强制最大化 就是+x或者-x

    ad-bc中ad和bc分别有四种情况(+,+)(+,-)(-,+)(-,-)

    考虑这些情况的最小值和最大值

    如果ad的最大值大于bc的最小值 而且bc的最大值大于ad的最小值

    那么就有可能变成ad=bc 就有解 R=mid

    否则变化范围就偏小 L=mid

    然后由于CF各种玄学的错误 改成cincout 然后setprecision卡精度都不过

    最后发现二分最后判断大于的时候加了个eps.....然后凉凉

    以后注意只有while判断的时候加eps就好了

    Code:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include <iostream>
     6 #include <iomanip>
     7 #define ms(a,b) memset(a,b,sizeof a)
     8 #define rep(i,a,n) for(int i = a;i <= n;i++)
     9 #define per(i,n,a) for(int i = n;i >= a;i--)
    10 #define inf 2147483647
    11 using namespace std;
    12 typedef long long ll;
    13 ll read() {
    14     ll as = 0,fu = 1;
    15     char c = getchar();
    16     while(c < '0' || c > '9') {
    17         if(c == '-') fu = -1;
    18         c = getchar();
    19     }
    20     while(c >= '0' && c <= '9') {
    21         as = as * 10 + c - '0';
    22         c = getchar();
    23     }
    24     return as * fu;
    25 }
    26 typedef long double D;
    27 #define eps (1e-10)
    28 #define max(a,b) (((a)>(b))?(a):(b))
    29 #define min(a,b) (((a)<(b))?(a):(b))
    30 //head
    31 D a,b,c,d;
    32 D L = 0,R = 1.1e9;
    33 D maxx[2],minn[2];
    34 bool check(D x) {
    35     maxx[0] = max( max((a-x)*(d-x) , (a+x)*(d-x)) , max((a+x)*(d+x) , (a-x)*(d+x)));
    36     minn[0] = min( min((a-x)*(d-x) , (a+x)*(d-x)) , min((a+x)*(d+x) , (a-x)*(d+x)));
    37     maxx[1] = max( max((b-x)*(c-x) , (b-x)*(c+x)) , max((b+x)*(c+x) , (b+x)*(c-x)));
    38     minn[1] = min( min((b-x)*(c-x) , (b-x)*(c+x)) , min((b+x)*(c+x) , (b+x)*(c-x)));
    39     if(maxx[0] >= minn[1] && maxx[1] >= minn[0]) return 1;
    40     return 0;
    41 }
    42 
    43 int main() {
    44     cin >> a >> b >> c >> d;
    45     while(R - L > eps) {
    46     D m = (L+R) / 2.0;
    47     check(m) ? R = m : L = m;
    48     }
    49     cout << setprecision(10) << fixed << L << endl;
    50     return 0;
    51 }
    View Code
    > 别忘了 总有人在等着你
  • 相关阅读:
    服务器 container
    oracle误操作表数据--回退(闪回)被提交后的数据
    在线笔记类
    idea maven项目使用过程中遇到的问题
    程序员提升网站
    检索网站
    公开课
    语言学习
    超强/超全面计算网站
    临时邮箱申请
  • 原文地址:https://www.cnblogs.com/yuyanjiaB/p/9811027.html
Copyright © 2011-2022 走看看