• zoj2607


    题意:如左图,给定A,B,C,D的面积分别为大于等于a,b,c,d,求最小的面积

    思路:因为a,b肯定有一个是满的(不然还可压缩到更小),同理,ac,bd,cd都只有一个是满的,所以有可能是对角满的,a,d满的或者,bc满的,如下图

    所以,当ad > bc是,ad满,否则bc满(长方形,分成四块,对角面积之积相等)

    现在我们来考虑图一:

         如题给定,则: p1 * q1 = a;  

                            p2 * q2 = d; 

                      条件: p2 * q1 >= c, p1 * q2 >= b; 即 : p2 / p1 > c / a, p2 / p1 < b / d;

          答案为 min(p2 * q1 + p1 * q2) ,代入最上边的等式,得 ans = min(p2 / p1 * a + p1 / p2 * d);

         设 t = p2 / p1;

         由基本不等式,得 ans >= 2*sqrt(a * b);, 当且仅当 t = sqrt(a * b)取到。。

         所以判断 t在不在条件里面,不再就判断端点就行。。

          另外一种情况同样考虑即可。。。

          只怪比赛时思路太搓了。。数学渣。。。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <fstream>
     5 #include <algorithm>
     6 #include <cmath>
     7 #include <set>
     8 #include <vector>
     9 #include <cstdlib>
    10 #define M0(a) memset(a, 0, sizeof(a))
    11 #define MXN 100010
    12 #define Inf 0xfffff
    13 #define eps 1e-6
    14 double a, b, c, d;
    15 double v;
    16 double p1, p2, q1, q2;
    17 
    18 
    19 void work1(){
    20      p1 = 1.0;
    21      p2 = sqrt(d / a);
    22      if (p2 > d/b) p2 = d /b;
    23      if (p2 < c/a) p2 = c /a;
    24      q1 = a / p1;
    25      q2 = d / p2; 
    26 }
    27 
    28 void work2(){
    29      p1 = 1.0;
    30      p2 = sqrt(c/b);
    31      if (p2 > c/a) p2 = c/a;
    32      if (p2 < d/b) p2 = d/b;
    33      q1 = c / p2;
    34      q2 = b / p1; 
    35 }
    36 
    37 void solve(){
    38      if (a * d >= b * c) work1();   
    39      if (a * d < b * c) work2();
    40      v = (p1 + p2) * (q1 + q2);
    41      printf("%.10f
    ", v);
    42      printf("%.10f %0.10f %.10f %.10f
    ", p1, p2, q1, q2);
    43 }
    44 
    45 int main(){
    46    // freopen("d.in", "r", stdin);
    47   //  freopen("d.out", "w", stdout);
    48     int cas = 0;
    49     while (scanf("%lf%lf%lf%lf", &a, &b, &c, &d) != EOF){
    50           solve();
    51     }
    52     fclose(stdin); fclose(stdout);    
    53 }

        

  • 相关阅读:
    希尔排序
    Java内存区域与内存溢出异常
    插入排序
    选择排序
    冒泡排序
    专利申请笔记
    Python基础指北
    mini web
    linux i/o multiplexing
    Python decorator module
  • 原文地址:https://www.cnblogs.com/yzcstc/p/3216228.html
Copyright © 2020-2023  润新知