题意:如左图,给定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. hdu 2647 (拓扑排序 邻接表建图的模板) Reward

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...

  2. (O)JS核心:call、apply和bind

    1. var func=function(a,b,c){ console.log([a,b,c]); }; func.apply(null,[1,2,3]); //[1,2,3] func.call( ...

  3. 谁说delphi没有IOCP库,delphi新的IOCP类库,开源中: DIOCP组件JSON流模块说明

    单元:JSonStream.pas 简介:本单元实现 流和json对象的相互转换,其中有一些保留的key. 依赖:superobject 保留key: __result.errCode  返回的错误编 ...

  4. UI设计教程学习分享:APP布局

    一.宫格布局 这种APP信息布局方式也是我们目前最常见的一种方式,也是符合用户习惯和黄金比例的设计方式,最知名的就是锤子手机的界面设计.锤子手机界面设计欣赏知名的APP设计采用的九宫格.六宫格等方式布 ...

  5. MySQL中的联结表

    使用联结能够实现用一条SELECT语句检索出存储在多个表中的数据.联结是一种机制,用来在一条SELECT语句中关联表,不是物理实体,其在实际的数据库表中并不存在,DBMS会根据需要建立联结,且会在查询 ...

  6. c++11 多线程依次打印ABC

    并发 练习代码 #include <thread> #include <vector> #include <mutex> #include <iostream ...

  7. IOS初级:UIwindow

    AppDelegate.h @property (strong, nonatomic) UIWindow *window; AppDelegate.m - (BOOL)application:(UIA ...

  8. .net判断当前时间是否在工作时间段内

    整理代码,判断当前时间是否在配置的工作时间段内,代码如下: public static bool getTimeSpan(string _strWorkingDayAM, string _strWor ...

  9. 解决maven update project 后项目jdk变成1.5的问题

    一.问题描述 在Eclipse中新建了一个Maven工程, 然后更改JDK版本为1.7, 结果每次使用Maven > Update project的时候JDK版本都恢复成1.5. 二.原因分析 ...

  10. IDEA导入MySQL包

    点击[Project Structure] 点击[Modules]   在点击下面的界面   找到自己下载的MySQL包就OK了