UVA 1356 - Bridge(自适应辛普森)

UVA 1356 - Bridge

题目链接

题意:一个桥长为B,桥上建电线杆,杆高为H,两杆之间距离不超过D,电线杆总长为L,杆子都是等距的,现在建最少的电线杆,问这时候电线离地面高度是多少

思路:二分高度,求出电线长,判断长度够不够即可,那么问题就变成怎么求弧长

求弧长公式为∫w/201+(f′(x)2)??????????√,

建立坐标系使得f(x)=ax2,带入点(w/2,
h)求出a,得到方程

那么问题就变成怎么求这个积分了

利用辛普森自适应法,去求即可

代码:

#include <cstdio>
#include <cstring>
#include <cmath>

const double eps = 1e-8;

int t;
double d, h, b, l, m, w;

inline double F(double x) {
    double a = 4 * m / w / w;
    return sqrt(1 + 4 * a * a * x * x);
}

inline double simpson(double fa, double fb, double fc, double a, double c) {
    return (fa + 4 * fb + fc) * (c - a) / 6;
}

double asr(double a, double b, double c, double esp, double A, double fa, double fb, double fc) {
    double ab = (a + b) / 2, bc = (b + c) / 2;
    double fab = F(ab), fbc = F(bc);
    double L = simpson(fa, fab, fc, a, b), R = simpson(fb, fbc, fc, b, c);
    if (fabs(L + R - A) <= 15 * eps) return L + R + (L + R - A) / 15.0;
    return asr(a, ab, b, esp / 2, L, fa, fab, fb) + asr(b, bc, c, esp / 2, R, fb, fbc, fc);
}

double asr(double a, double c, double eps) {
    double b = (a + c) / 2;
    double fa = F(a), fb = F(b), fc = F(c);
    return asr(a, b, c, eps, simpson(fa, fb, fc, a, c), fa, fb, fc);
}

int main() {
    int cas = 0;
    scanf("%d", &t);
    while (t--) {
	scanf("%lf%lf%lf%lf", &d, &h, &b, &l);
	double n = ceil(b / d);
	l = l / n; w = b / n;
	double x = 0, y = h;
	while (fabs(x - y) > eps) {
	    m = (x + y) / 2;
	    if (2 * asr(0, w / 2, eps) < l) x = m;
	    else y = m;
	}
	printf("Case %d:\n%.2lf\n", ++cas, h - x);
	if (t) printf("\n");
    }
    return 0;
}

UVA 1356 - Bridge(自适应辛普森),布布扣,bubuko.com

时间: 2024-10-12 11:19:26

UVA 1356 - Bridge(自适应辛普森)的相关文章

uva 1356 - Bridge(积分+二分)

题目链接:uva 1356 - Bridge 题目大意:在一座长度为B的桥上建若干个塔,塔的间距不能超过D,塔的高度为H,塔之间的绳索形成全等的抛物线.绳索的总长度为L.问在建最少塔的情况下,绳索的最下段离地面的高度. 解题思路:贪心的思想求出最少情况下建立的塔数. 二分高度,然后用积分求出两塔之间绳索的长度. C++ 积分 #include <cstdio> #include <cstring> #include <cmath> #include <algori

UVA - 1356 Bridge

Description A suspension bridge suspends the roadway from huge main cables, which extend from one end of the bridge to the other. These cables rest on top of high towers and are secured at each end by anchorages. The towers enable the main cables to

【自适应辛普森积分】hdu1724 Ellipse

Ellipse Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2502    Accepted Submission(s): 1126 Problem Description Math is important!! Many students failed in 2+2's mathematical test, so let's AC

自适应辛普森法

Simpson公式 设\(f(x)\)为原函数,$g(x)=Ax2+Bx+C $ 为拟合后的函数,则有: \[ \int_{a}^{b}f(x)dx \approx \int_{a}^{b}Ax^2+Bx+C = \frac{A}{3}(b^3-a^3)+\frac{B}{2}(b^2-a^2)+C(a-b) =\frac{(b-a)}{6}(f(a)+f(b)+4f(\frac{a+b}{2})) \] 然后就得到了Simpson公式 \[ \int_{a}^{b}f(x)dx \approx

自适应辛普森了解一下

A 了这道超短的紫题,来发表一下自己的一些想法... 简单介绍辛普森这玩意儿 不如先学学泰勒展开? 首先泰勒展开大家都听说过吧?[雾 没听说过?安利某知乎回答:苍老师教你如何更好地记忆泰勒展开 然后你就知道了,泰勒展开其实是对于某个函数在一个点不断去高阶求导,然后用求导得到的信息构造一个多项式,使得这个多项式在一定范围内几乎和原函数拟合(可以理解为接近重合的意思吧...) 类比到辛普森? 那么其实自适应辛普森也是类似的道理,只不过它是用了分治的方法去构造这个 假 拟合 多项式(其实就是二次函数,

P4525 【模板】自适应辛普森法1

P4525 [模板]自适应辛普森法1 1 #include <bits/stdc++.h> 2 using namespace std; 3 const double eps = 1e-6; 4 double a, b, c, d, l, r; 5 inline double f(double x) { 6 return (c*x+d)/(a*x+b); 7 } 8 inline double simpson(double l, double r) { 9 double mid = (l+r)

uva 1356/LA 3485 Bridge 题解

题意:有一座桥,桥上等距摆若干个塔,高度H,宽度不计.相邻两个塔距离不超过D.有一个绳索,总长度为L,桥的长度为L,两个塔之间的绳索成全等的抛物线.求建最少的塔的时候绳索下端离地高度y. 白书上的例题..我基本上是抄的代码. 间隔数n=ceil(B/D),每个间隔宽度D'=B/n,之间的绳索长度L'=L/n.则抛物线的宽度已知,即D'. 根据微积分知识,可导函数f(x)在区间[a,b]上的弧长为\(\int_{b}^{a} \sqrt{1+[f'(x)]^2}dx\) . 则此时抛物线的长度只与

[BZOJ1502]月下柠檬树(自适应辛普森积分)

1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1387  Solved: 739[Submit][Status][Discuss] Description 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地 坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理.李哲是一个喜爱思考的孩子,当他看到在月光的照射下 柠檬树投在地面上的影子是如此的清晰,马上想到了一个问

BZOJ 1502 NOI 2005 月下柠檬树 计算几何 自适应辛普森积分

题目大意:有一个由圆锥和圆台组成的柠檬树,在月亮发出的平行光下,可以形成一个影子,求这个影子的面积. 思路:理解投影的性质:只要是平行光线,投影在水平面上,所得的图形都与原图形全等. 知道了这一点我们就可以画画图,分析就知道,其实柠檬树的影子,就是一些园和等腰梯形的面积的并.(如下图,样例) 运用计算几何的知识就可以得到圆的方程和圆的公切线的方程,然后得到一个连续的函数.最后这个题就成为一直函数的解析式,求这个函数与X轴之间的面积. 套用辛普森积分:Simpson(l,r) = (F(l) +