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在不在条件里面,不再就判断端点就行。。
另外一种情况同样考虑即可。。。
只怪比赛时思路太搓了。。数学渣。。。
#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的更多相关文章
随机推荐
- 洛谷3119 [USACO15JAN]草鉴定Grass Cownoisseur
原题链接 显然一个强连通分量里所有草场都可以走到,所以先用\(tarjan\)找强连通并缩点. 对于缩点后的\(DAG\),先复制一张新图出来,然后对于原图中的每条边的终点向新图中该边对应的那条边的起 ...
- JoyOI1391 走廊泼水节
一道另类生成树 原题链接 将输入的树的\(n-1\)条边按从小到大排序,然后\(Kruskal\)在生成该树的过程中计算新增边的总长. 当在连第\(i\)条边,设该边的两端点为\(x,y\),长度为\ ...
- nodejs 数字字节转换操作
function number2Bytes(i) { var arr = new Int32Array(1); arr[0] = 0; var buf = Buffer.from(arr.buffer ...
- 将某视图View转换为UIImage
+ (UIImage *)getSharedScreenView{ UIWindow *screenWindow = [[UIApplication sharedApplication]keyWind ...
- eclipse中tomcat调试正确关联源码
1.build path中jar包关联本地源码 2.tomcat中添加source关联工程lib下的jar包 以上两步即可. 可解决tomcat直接关联本地源码debug时无法计算表达式的情况. 错误 ...
- JDK 之 Java Bean 内省机制
JDK 之 Java Bean 内省机制 JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html) JavaBean 是一种特殊的 Jav ...
- Netty 源码 Channel(一)概述
Netty 源码 Channel(一)概述 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) Channel 为 Netty ...
- leveldb skiplist的改编非并发去除内存池版本 代码练习
// MuSkipList.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <random> #include ...
- socket的同步异步的性能差别,以及listen的参数backlog
先说listen的参数backlog,同步系统中分别设置为5,512,1024的跑分情况 跑分工具apache的ab,参数为:ab -n50000 -c300 backlog=5跑分结果 Reques ...
- Ubuntu服务器如何搭建PPTPD(原创保证可用)
Ubuntu是一款基于linux的操作系统,无需许可和订购的费用,Ubuntu Server可以帮助您高效地扩展您的数据中心.它精简的架构和自动化部署的能力让您只需花费更少的运算能力和资源,便可提供更 ...