BZOJ 1502 NOI 2005 月下柠檬树
题目大意
给定一些圆和梯形,求它们面积的并
解答
直接用辛普森公式积分
\int_a^bf(x)\times dx \approx {b-a\over6}[f(a)+f({a+b\over2})+f(b)]
由于辛普森公式对于4次及以上的函数误差比较大,所以可以二分,当满足
|Simpson(a, b)-Simpson(a,{a+b\over2})-Simpson({a+b\over2}, b)| \le eps
时就可以近似认为Simpson求出的值是正确值。
f(x)只要预处理一下就可以出来,首先将所有的高度乘上 cot(α)cot(\alpha),然后求相邻两个不套在一起的圆的公切线:
sinA={BD-CE\over BC}\\D(B.x+BD\times sinA, BD \times cosA)
参考代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <algorithm>using namespace std;const double eps = 1e-8;class Line
{public:double x1, y1, x2, y2;
};int n;
double alpha;
double h[800];
double r[800];
double ll = 0, rr = 0;
Line ls[1600];
int lt = 0;inline double sqr(double x)
{return x*x;
}void readin()
{scanf("%d %lf", &n, &alpha);double tmp = 1/tan(alpha);double x;for (int i = 0; i <= n; i++) {scanf("%lf", &x);x *= tmp;h[i] = x + (i ? h[i-1] : 0);}for (int i = 0; i < n; i++) {scanf("%lf", &r[i]);ll = min(ll, h[i]-r[i]);rr = max(rr, h[i]+r[i]);}r[n] = 0;rr = max(rr, h[n]);
}void preWork()
{double d;for (int i = 0; i < n; i++) {d = h[i+1]-h[i];if (d > fabs(r[i+1]-r[i])) {double sinbeta = (r[i]-r[i+1])/d;double cosbeta = sqrt(1-sqr(sinbeta));ls[lt].x1 = h[i]+r[i]*sinbeta;ls[lt].y1 = r[i]*cosbeta;ls[lt].x2 = h[i+1]+r[i+1]*sinbeta;ls[lt++].y2 = r[i+1]*cosbeta;}}
}double f(double l)
{double ret = 0;for (int i = 0; i < n; i++) {if (fabs(h[i]-l) < r[i])ret = max(ret, sqrt(sqr(r[i])-sqr(h[i]-l)));}for (int i = 0; i < lt; i++) {if (ls[i].x1 < l && ls[i].x2 > l) {double k = (ls[i].y2-ls[i].y1) / (ls[i].x2-ls[i].x1);ret = max(ret, ls[i].y1+k*(l-ls[i].x1));}}return ret;
}double simpson(double lp, double rp)
{double mid = (lp+rp)/2;return (rp-lp)*(f(lp)+4*f(mid)+f(rp))/6;
}double work(double lp, double rp)
{double mid = (lp+rp)/2;double cmp = simpson(lp, mid) + simpson(mid, rp);double cmp1 = simpson(lp, rp);if (fabs(cmp1-cmp) < eps)return cmp;return work(lp, mid) + work(mid, rp);
}int main()
{readin();preWork();printf("%.2lf", work(ll, rr)*2);return 0;
}
BZOJ 1502 NOI 2005 月下柠檬树相关推荐
- BZOJ 1502:月下柠檬树
BZOJ 1502:月下柠檬树 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1502 题目大意:给出一棵由圆台构成的树以及一个平行光源,问 ...
- BZOJ 1502: [NOI2005]月下柠檬树 simpson积分
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1244 Solved: 662 [Submit][Statu ...
- 【bzoj 1502】月下柠檬树
月下柠檬树 题意 求n个圆与他们的公切线的定积分. 解法 求出圆的公切线就可以了. 特别坑的一点 : 最两端的圆,有可能会被其他的圆所包含,所以要重新求一下最左端与最右端. 比较坑的一点 : 精度要设 ...
- 1502: [NOI2005]月下柠檬树
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1077 Solved: 600 [Submit][Statu ...
- [BZOJ1502]月下柠檬树(自适应辛普森积分)
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1387 Solved: 739 [Submit][Statu ...
- 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1017 Solved: 562 [Submit][Statu ...
- 【NOI2005】 月下柠檬树
题目描述 月下柠檬树 主文件名:lemon [问题描述] 李哲非常非常喜欢柠檬树, 特别是在静静的夜晚,当天空中有一弯明月温柔 地照亮地面上的景物时, 他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思 ...
- [NOI2005]月下柠檬树 (自适应辛普森)
P4207 [NOI2005]月下柠檬树 如图,我们要求的面积就是这些圆形跟梯形的组合,由于投射到地面上,显然有h′=htanθh' = \frac{h}{tan \theta}h′=tanθh,由 ...
- 【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分
[BZOJ1502][NOI2005]月下柠檬树 Description 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树 ...
最新文章
- Platform Builder 5下WinCE 5.0目录结构
- JAVA基础中关于double进制问题的解析
- mysql补充(3)优化sql语句查询常用的30种方法
- mysql1526错误_mysql 分区 1526错误
- 【剑指offer】_18 数据流中的中位数
- 第38天:运算符、字符串对象常用方法
- python测试框架untest_Python测试框架之unittest和pytest
- linux之软连接和硬连接的区别
- Android模拟器中添加SD卡(转)
- MySQL备份---lvm snapshot
- 计算机知识提炼,2017计算机考研:操作系统复习策略及重要知识点提炼
- linux安装Drcom客户端,Ubuntu 10.10校园网安装宽带认证客户端Drcom联网
- Arduino学习之第一篇
- spring boot 2.0 配置logback日志
- 华为任正非《一江春水向东流》读后感
- 读文献——《Deep Residual Learning for Image Recognition》
- Java MediaMetadataCompat
- vue+element实现美观大方好看的音乐网站,仿照咪咕音乐网
- mountain乐谱-蒲公英的约定
- UE4/5 EasyFog插件使用
热门文章
- 从“交易核心”到“数据核心”,国产数据库要换道超车丨数据猿专访
- yield函数c语言,yield的用法
- C++系列案例-大数据减法-绘制余弦曲线-兔子数量-快速排序
- java计算机毕业设计线上甜品店售卖系统源码+系统+数据库+lw文档
- 【电子技术】眼图的基本概念和原理(2)
- HashMap的put()方法的再理解
- 在PHP中implement什么意思,php 接口,extends,implement,implements 作用及区别收集整理
- 王权富贵:给Linux系统装配机器学习需要的软件
- 暴强贴:从.NET平台调用Win32 API
- 查询学生表中姓“张”,“李”,“刘”的学生的情况。