首页 > 其他 > 详细

poj1905

时间:2014-01-20 22:47:25      阅读:413      评论:0      收藏:0      [点我收藏+]

这个题有两个难点

1、解方程

bubuko.com,布布扣

图片大了点呵。。Retina屏的水果本就是不错!

这方程是超越方程,只有数值解,那怎么办呢?

2、二分单调性证明

证明如下:

上面的方程,另左边等于s,则可推得弧长s与h间关系如下:

bubuko.com,布布扣

绘制该函数图像如下:

bubuko.com,布布扣

可知该函数是随l和s单增的,故可用二分逼近。

bubuko.com,布布扣

上图是刚才那个超越方程的隐函数围道图像,也可证明。

另提供几何证明(为什么h越大s越大,可以利用二分来逼近这h在给定s下的最大值)

bubuko.com,布布扣

下面是代码:

#include <iostream>
#include <math.h>
#include <iomanip>

using namespace std;

#define eps 1e-5

int main() {
	double L, n, c, s;
    double h;
	double r;
	while (cin >> L >> n >> c) {
		if (L < 0 && n < 0 && c < 0)
			break;
		double low = 0.0;
		double high = 0.5 * L;
		double mid;
		s = (1 + n * c) * L;
		while (high - low > eps) {
			mid = (low + high) / 2;
			r = (4 * mid * mid + L * L) / (8 * mid);
			if (2 * r * asin(L / (2 * r)) < s)
				low = mid;
			else
				high = mid;
		}
		h = mid;
		cout << fixed << setprecision(3) << h << endl;
	}
}


poj1905

原文:http://blog.csdn.net/zhengnanlee/article/details/18494917

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!