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(自适应辛普森)的更多相关文章
- uva 1356 Bridge ( 辛普森积分 )
uva 1356 Bridge ( 辛普森积分 ) 不要问我辛普森怎么来的,其实我也不知道... #include<stdio.h> #include<math.h> #inc ...
- HAUT 1261地狱飞龙 自适应辛普森 数值积分
1261: 地狱飞龙 时间限制: 1 秒 内存限制: 64 MB 提交: 300 解决: 68 题目描述 最近clover迷上了皇室战争,他抽到了一种地狱飞龙,很开心.假设地域飞龙会对距离为d的敌 ...
- 【自适应辛普森积分】hdu1724 Ellipse
Ellipse Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 洛谷4525 & 4526:【模板】自适应辛普森法——题解
参考:https://phqghume.github.io/2018/05/19/%E8%87%AA%E9%80%82%E5%BA%94%E8%BE%9B%E6%99%AE%E6%A3%AE%E6%B ...
- HDU - 1071 - The area - 高斯约旦消元法 - 自适应辛普森法积分
http://acm.hdu.edu.cn/showproblem.php?pid=1071 解一个给定三个点的坐标二次函数某区域的积分值. 设出方程之后高斯消元得到二次函数.然后再消元得到直线. 两 ...
- HDU 1724:Ellipse(自适应辛普森积分)
题目链接 题意 给出一个椭圆,问一个[l, r] 区间(蓝色区域)的面积是多少. 思路 自适应辛普森积分 具体一些分析如上. 很方便,套上公式就可以用了. 注意 eps 的取值影响了跑的时间,因为决定 ...
- HDU 1724 Ellipse (自适应辛普森积分)
题目链接:HDU 1724 Problem Description Math is important!! Many students failed in 2+2's mathematical tes ...
- HDU - 1724 Ellipse 自适应辛普森模板
OJ 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #include ...
- 洛谷P4526 【模板】自适应辛普森法2
P4526 [模板]自适应辛普森法2 洛谷传送门 题目描述 计算积分 保留至小数点后5位.若积分发散,请输出"orz". 输入格式 一行,包含一个实数,为a的值 输出格式 一行,积 ...
随机推荐
- DocView mode 0 -- 介绍
DocView mode,可作为主模式也可以作为minor mode,可以用来阅读DVI(ps后缀),PDF,OpenDocument(libreoffice文档),微软的doc.支持截取 ...
- lnmp环境运行laravel open_basedir restriction in effect 问题
环境配置:centos 7 : php 7.1.5 Warning: require(): open_basedir restriction in effect. File(/home/wwwroot ...
- windows和ubuntu14.04双系统设置默认启动项
首先开机或者重启,在启动项选择菜单处记住win7对应的序号,从上至下的序号从0开始计数,我的win7系统选项处于第5个,那么序号就应该是4,记住后,打开ubuntu系统. 2 按下Ctrl+alt+T ...
- TOJ 2596: Music Notes
2596: Music Notes Time Limit(Common/Java):1000MS/10000MS Memory Limit:65536KByteTotal Submit: 3 ...
- P1026 统计单词个数 (动态规划)
题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...
- HashMap构造函数有哪些
hashMap有4个构造函数: public HashMap(int initialCapacity, float loadFactor) public HashMap(int initialCapa ...
- FreeMarker常用语法学习
1.API网址 http://freemarker.sourceforge.net/docs/ 2.一个Table的例子 freemarker 对表格的控制 这里将所有需要在一个区域显示到数据全部ad ...
- 使用反射获取类中的属性(可用于动态返回PO类的列,当做表格的表头)
//利用反射取类中的属性字段 try { Class clazz = Class.forName("houji.bean.model.TaskModel"); Field[] fi ...
- qu de hanzi 首字母
Function hztopy(hzpy As String) As StringDim hzstring As String, pystring As StringDim hzpysum As In ...
- 湘潭oj1203/邀请赛A题 数论+java大数
求 n%1+n%2+n%3+n%4+.........n%n=,n<=10^12次. 开始时盲目地找规律,结果一无所获.后来经学长点拨,天资愚钝,搞了半天才明白. 先上图: 对于该题,在求区间( ...