LA 3485 辛普森公式求积分
来源:互联网 发布:数据产品经理培训 编辑:程序博客网 时间:2024/05/17 03:49
传送门 : LA 3485
题解
- 曲线积分知识(弧长公式):
若可导曲线函数为f(x)其弧长公式为L=∫ba1+f′(x)2−−−−−−−−√
所以这题抛物线设为f(x) = a(x - d)(x +d)
弧长为2∗∫d01+4a2x2−−−−−−−−√ - 先预处理出d,可以看出d固定时弧长随a递增而递增, 所以直接二分枚举a*d*d求解, 积分用辛普森公式.
code
#include <iostream>#include <iomanip>#include <cmath>using namespace std;typedef double ld;const ld eps = 1e-10;int D, H, B, L;ld a;ld f(ld x){ return sqrt(1 + 4 * a * a * x * x);}ld cal(ld l, ld r){ return (r - l) * (f(l) + 4 * f((l + r) / 2) + f(r)) / 6;}ld simpson(ld l, ld r){ ld mid = (l + r) / 2; ld sa = cal(l, r); ld la = cal(l, mid), ra = cal(mid, r); if(fabs(sa - la - ra) < eps) return sa; return simpson(l, mid) + simpson(mid, r);}int main(){ int t, cas = 0; cin >> t; while(t--){ cin >> D >> H >> B >> L; int n = (B + D - 1) / D;/**不加D-1,RE...*/ ld ll = (ld)L / n, dd = (ld)B / n / 2;/**预处理dd*/ ld l = 0, r = (ld)H; while(r - l > eps){/**二分*/ ld mid = (l + r) / 2; a = mid / dd / dd;/**(mid = a * d * d) */ if(simpson(0, dd) * 2 > ll) r = mid; else l = mid; } cout << "Case " << ++cas << ":" << endl; cout << fixed << setprecision(2) << H - l << endl; if(t) cout << endl; } return 0;}
0 0
- LA 3485 辛普森公式求积分
- 自适应辛普森公式求积分
- LA 3485 自适应辛普森公式
- hdu 1724 辛普森公式求积分
- hdu 1724数学题 辛普森公式求积分
- 自适应辛普森公式求积分模板
- HDU1724[辛普森公式求积分]Ellipse
- 辛普森积分(自适应辛普森公式求积分)
- La3485 利用自适应辛普森公式 求积分的和
- HDU1724-辛普森积分公式法求椭圆面积
- HDU 2.1.7 (求定积分公式)
- 牛顿-莱布尼茨公式求积分例题
- LA 3485 自适应Simpson积分 解题报告
- HDU 1724 辛普森积分公式
- hdu 1724 辛普森积分公式
- 积分公式
- HDU 1724 Ellipse (simpson公式,求积分)
- 用复化梯形公式求定积分举例(C++实现)
- 写一个函数判断year是不是闰年
- OptionsMenu选项菜单的使用
- Spring 国际化配置
- SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
- helloworld:基于Qsys的第一个Nios II系统设计
- LA 3485 辛普森公式求积分
- request.getContextPath/getScheme/getServerName/getServerPort
- Scala之枚举
- Bootsrap 3.0:全局CSS样式
- 添加输出版权信息
- Epoll在LT和ET模式下的读写方式
- Coursera ML笔记 -----week7 Support Vector Machine
- Python 安装setuptools和pip
- Kali密码攻击之离线攻击工具(二)