LA 3485 (积分 辛普森自适应法) Bridge
桥的间隔数为n = ceil(B/D),每段绳子的长度为L / n,相邻两塔之间的距离为 B / n
主要问题还是在于已知抛物线的开口宽度w 和 抛物线的高度h 求抛物线的长度
弧长积分公式为:
设抛物线方程为f(x) = ax2,则这段抛物线弧长为
查积分表或者自己分部积分算一下:
二分抛物线高度x,使得每段抛物线长度为L / n,所求答案为H - x
#include <cstdio>
#include <cmath> inline double F(double a, double x)
{//sqrt(a^2+x^2)的原函数
double a2 = a*a, x2 = x*x;
double s = sqrt(a2+x2);
return (x*s + a2*log(x+s))/;
} double length(double w, double h)
{//宽为w,高为h的抛物线的长度
double a = *h/w/w;
double b = 0.5/a;
return *a*(F(b, w/) - F(b, ));
} int main()
{
//freopen("in.txt", "r", stdin); int T;
scanf("%d", &T);
for(int kase = ; kase <= T; kase++)
{
int D, H, B, L;
scanf("%d%d%d%d", &D, &H, &B, &L);
int n = (B-)/D + ; //间隔数
double d = (double)B / n; //间隔
double l = (double)L / n; //每段绳长
double Left = , Right = H;
while(Right - Left > 1e-)
{//二分求抛物线高度
double mid = (Right + Left) / ;
if(length(d, mid) > l) Right = mid;
else Left = mid;
}
if(kase > ) puts("");
printf("Case %d:\n%.2f\n", kase, H-Left);
} return ;
}
代码君
后面又介绍了一种Simpson自适应算法,可以求任意连续函数的积分。
虽然不明白这个式子是怎么来的,但并不能阻止我们学习自适应辛普森算法。
书上还说可以将区间端点和中点的函数值作为参数传入以减少重复计算,求教。。
#include <cstdio>
#include <cmath> double a; inline double F(double x)
{ return sqrt(+*a*a*x*x); } double simpson(double a, double b)
{
double c = (a+b)/;
return (F(a)+*F(c)+F(b))*(b-a)/;
} double asr(double a, double b, double eps, double A)
{
double c = (a+b)/;
double L = simpson(a, c), R = simpson(c, b);
if(fabs(L+R-A) <= *eps) return L + R + (L+R-A)/15.0;
return asr(a, c, eps/, L) + asr(c, b, eps/, R);
} double asr(double a, double b, double eps)
{
return asr(a, b, eps, simpson(a, b));
} double length(double w, double h)
{
a = 4.0*h/w/w;
return asr(, w/, 1e-) * ;
} int main()
{
//freopen("in.txt", "r", stdin); int T;
scanf("%d", &T);
for(int kase = ; kase <= T; kase++)
{
int D, H, B, L;
scanf("%d%d%d%d", &D, &H, &B, &L);
int n = (B-)/D + ;
double d = (double)B / n;
double l = (double)L / n;
double x = , y = H;
while(y - x > 1e-)
{
double m = (x + y) / ;
if(length(d, m) > l) y = m;
else x = m;
}
if(kase > ) puts("");
printf("Case %d:\n%.2f\n", kase, H - x);
} return ;
}
代码君
LA 3485 (积分 辛普森自适应法) Bridge的更多相关文章
- LA 3485 Bridge
自适应辛普森公式模板. #include<algorithm> #include<iostream> #include<cstring> #include<c ...
- UVA 1356 - Bridge(自适应辛普森)
UVA 1356 - Bridge option=com_onlinejudge&Itemid=8&page=show_problem&category=493&pro ...
- $Simpson$积分入门
\(\rm{0x01}\) 前言 首先阐明一点,自适应辛普森算法(\(\rm{Adaptive ~Simpson's~ rule}\) )是一类近似算法(\(\rm{Approximation ~al ...
- .Uva&LA部分题目代码
1.LA 5694 Adding New Machine 关键词:数据结构,线段树,扫描线(FIFO) #include <algorithm> #include <cstdio&g ...
- pytorch基础学习(二)
在神经网络训练时,还涉及到一些tricks,如网络权重的初始化方法,优化器种类(权重更新),图片预处理等,继续填坑. 1. 神经网络初始化(Network Initialization ) 1.1 初 ...
- TCP(一)
传输控制协议TCP特点:1,面向连接的运输层协议 2,每一条TCP只能有两个端点.点对点 3,TCP是可靠的,无差错,不重复,顺序到达. 4,全双工,允许通信 ...
- 计算几何 val.3
目录 计算几何 val.3 自适应辛普森法 定积分 引入 辛普森公式 处理精度 代码实现 模板 时间复杂度 练习 闵可夫斯基和 Pick定理 结论 例题 后记 计算几何 val.3 自适应辛普森法 可 ...
- zhengrui集训笔记2
Day_6 计算几何 点积\Large 点积点积 叉积\Large 叉积叉积 极角\Large 极角极角 < π\piπ :叉积判断 else :atan2 旋转\Large 旋转旋转 左乘第一 ...
- 关于redis内存分析,内存优化
对于redis来说,什么是最重要的? 毋庸置疑,是内存. 一.reids 内存分析 redis内存使用情况:info memory 示例: 可以看到,当前节点内存碎片率为226893824/20952 ...
随机推荐
- STL中的stack(堆栈)
转载:http://blog.csdn.net/morewindows/article/details/6950881 栈(statck)这种数据结构在计算机中是相当出名的.栈中的数据是先进后出的(F ...
- The 2014 ACM-ICPC Asia Mudanjiang Regional First Round
The Himalayas http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5341 签到 #include<cstdio& ...
- Eclipse 中Alt+/快捷键失效的解决办法。
1.Eclipse下进入Windows ->Preperences ->General ->keys2.把word completion的快捷键设置alt+/删掉! 3.把Conte ...
- Tesseract-OCR牛刀小试:模拟请求时的验证码识别
原文:http://yaohuiji.com/tag/tesseract%EF%BC%8Cocr%EF%BC%8C%E9%AA%8C%E8%AF%81%E7%A0%81/ 有个邪恶的需求,需要识别验证 ...
- Open multiple Eclipse workspaces on the Mac
This seems to be the supported native method in OS X: cd /Applications/eclipse/ open -n Eclipse.app ...
- React-Native学习指南
React-Native学习指南 本指南汇集React-Native各类学习资源,给大家提供便利.指南正在不断的更新,大家有好的资源欢迎Pull Requests! 同时还有Awesome React ...
- Linux Shell 数字计算与比较
直接上脚本, 使用$(())以及$[]进行数字计算 数值比较:n1 -eq n2检查n1是否等于n2 n1 -le n2检查n1是否小于等于n2n1 -ge n2检查n1是否大于等于n ...
- Project Euler 84:Monopoly odds 大富翁几率
Monopoly odds In the game, Monopoly, the standard board is set up in the following way: ...
- 规范化ProjectEuler
Euler Level3 规范化程序: 包名:LevelX,X是等级 每题程序名:PE0xx.java,PE0xx.py 程序有必要的注释,不同方法运行结果也在程序中 规范化博文: 名字:Projec ...
- SaaS系列介绍之十五: SaaS知识重用
1 建立并积累自己的开发体系 遵行业界的规定又有自己的特色是我们所追求的目标.成功的软件公司都有丰富而可复用的代码组件,几行代码在单个系统里可能无足轻重,但一旦可在大量的系统中可重复使用那就是价值不菲 ...