题意:如左图,给定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在不在条件里面,不再就判断端点就行。。

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

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

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <set>
#include <vector>
#include <cstdlib>
#define M0(a) memset(a, 0, sizeof(a))
#define MXN 100010
#define Inf 0xfffff
#define eps 1e-6
double a, b, c, d;
double v;
double p1, p2, q1, q2; void work1(){
p1 = 1.0;
p2 = sqrt(d / a);
if (p2 > d/b) p2 = d /b;
if (p2 < c/a) p2 = c /a;
q1 = a / p1;
q2 = d / p2;
} void work2(){
p1 = 1.0;
p2 = sqrt(c/b);
if (p2 > c/a) p2 = c/a;
if (p2 < d/b) p2 = d/b;
q1 = c / p2;
q2 = b / p1;
} void solve(){
if (a * d >= b * c) work1();
if (a * d < b * c) work2();
v = (p1 + p2) * (q1 + q2);
printf("%.10f\n", v);
printf("%.10f %0.10f %.10f %.10f\n", p1, p2, q1, q2);
} int main(){
// freopen("d.in", "r", stdin);
// freopen("d.out", "w", stdout);
int cas = ;
while (scanf("%lf%lf%lf%lf", &a, &b, &c, &d) != EOF){
solve();
}
fclose(stdin); fclose(stdout);
}

zoj2607的更多相关文章

随机推荐

  1. PHP 语句 函数 字符串处理

    语句: 一:分支语句 1.if(条件1){满足条件1执行} 2.if(条件1){满足条件1执行}else{不满足条件1执行} 3.if(条件1){满足条件1执行}else if(条件2){满足条件2执 ...

  2. Android.InstallAntOnMacOSX

    在Mac OS X上安装ant http://blog.csdn.net/crazybigfish/article/details/18215439

  3. 高级数据库技术SQL

  4. BZOJ1178或洛谷3626 [APIO2009]会议中心

    BZOJ原题链接 洛谷原题链接 第一个问题是经典的最多不相交区间问题,用贪心即可解决. 主要问题是第二个,求最小字典序的方案. 我们可以尝试从\(1\to n\)扫一遍所有区间,按顺序对每一个不会使答 ...

  5. SpringBoot 多环境配置

    转载:https://www.cnblogs.com/gdpuzxs/p/7191436.html 在我们的实际开发中,一般都有三套环境,开发环境,测试环境,生产环境,三套环境的数据库连接配置也有所不 ...

  6. NOIP2017普及组T2题解

    还是神奇的链接 上面依然是题目. 这道题依然很简单,比起2015年的普及组t2好像还是更水一些. 不过这道题能讲的比第一题多. 我们一起来看一下吧! 这一题,我们首先将书的编号全部读入,存在一个数组里 ...

  7. python学习 day18 (3月25日)---( 面向对象浅析)

    面向对象思想: 字典表示对象: 不是太好 因为 变量 得一个个的赋值改值 {'name':'alex','blood':20,'attack':1,'sex':'不'} {'name':'太亮','b ...

  8. Java语法基础动手动脑

    仔细阅读示例:EnumTest.Java,运行它,分析运行结果? 你能得到什么结论?你掌握了枚举类型的基本用法了吗? EnumTest.java public class EnumTest { pub ...

  9. 深度学习中 epoch,[batch size], iterations概念解释

    one epoch:所有的训练样本完成一次Forword运算以及一次BP运算 batch size:一次Forword运算以及BP运算中所需要的训练样本数目,其实深度学习每一次参数的更新所需要损失函数 ...

  10. 2018.11.07 bzoj1965: [Ahoi2005]SHUFFLE 洗牌(快速幂+exgcd)

    传送门 发现自己的程序跑得好慢啊233. 管他的反正AC了 先手玩样例找了一波规律发现题目要求的就是a∗2m≡l(modn+1)a*2^m\equiv l \pmod {n+1}a∗2m≡l(modn ...