UVa Problem 10215 The Largest/Smallest Box... (最大/最小的盒子)

// The Largest/Smallest Box... (最大/最小的盒子)
// PC/UVa IDs: 111306/10215, Popularity: A, Success rate: average Level: 2
// Verdict: Accepted
// Submission Date: 2011-11-02
// UVa Run Time: 0.040s
//
// 版权所有(C)2011,邱秋。metaphysis # yeah dot net
//
// [解题方法]
// 容易知道,盒子的容积为:
//
// V = (L - 2 * x) * (W - 2 * x) * x = 4 * (x * x * x) - 2 * (L + W) * (x * x) +
// L * W * x 
//
// 要求其极值,很明显,当 x = 0 或 x = min(L, W) / 2 时有最小值 0,但是最大值就不是那么容易
// 看出来了,可以通过对该式求导得出。上式的导数为:
//
// V‘ = 12 * x * x - 4 * (L + W) * x + L * W
//
// 解导数为 0 时的方程,方程的一个解即为取最大值时 x 的值。值得注意的是,由于本题并未采用 Special
// Judge,需要在结果加上一个很小的常数才能 AC,而在 Programming Challenges 上加上很小的常数
// 反而错误。

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

#define EPSILON (1E-7)

int main(int ac, char *av[])
{
	double L, W;

	cout.precision(3);
	cout.setf(ios::fixed | ios::showpoint);

	while (cin >> L >> W)
	{
		cout << (L + W - sqrt((double)(L * L - L * W + W * W))) / 6.0 + EPSILON;
		cout << " 0.000 ";
		cout << (min(L, W) * 0.5 + EPSILON) << endl;
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值