【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分
【BZOJ1502】[NOI2005]月下柠檬树
Description
![](http://www.lydsy.com/JudgeOnline/upload/201802/111.png)
Input
Output
输出1个实数,表示树影的面积。四舍五入保留两位小数。
Sample Input
10.0 10.00 10.00
4.00 5.00
Sample Output
题解:简洁题意就是让你求一堆圆和梯形的面积交。
Simpson积分:
相当于用一个3次函数去拟合所求的图形,可以用于任意连续不规则图形,但是误差很大。自适应simpson积分呢,就是再对f(l,mid)和f(mid,r)分别算一下。如果f(l,mid)+f(mid,r)与f(l,r)误差很小,则直接返回f(l,r),否则继续递归计算。这样误差就比较小了(虽说也可以卡)。
剩下的问题就是如何求两圆的公切线。比较容易的方法是设两圆半径为R,r,先令R'=R-r,r'=0,这样就把第二个圆缩成了一个点,变成求点与圆的切线,再平移回去即可。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#define pi acos(-1.0)
using namespace std;
typedef double db;
const db eps=1e-6;
int n,m;
db alpha,h[510],O[510],R[510],ax[510],ay[510],bx[510],by[510];
inline db f(db x)
{db ret=0;int i;for(i=1;i<=n;i++) if(x>=O[i]-R[i]&&x<=O[i]+R[i])ret=max(ret,sqrt(R[i]*R[i]-(O[i]-x)*(O[i]-x)));for(i=1;i<=m;i++) if(x>=ax[i]&&x<=bx[i])ret=max(ret,ay[i]+(by[i]-ay[i])*(x-ax[i])/(bx[i]-ax[i]));return ret;
}
inline db simpson(db a,db b)
{return (b-a)/6*(f(a)+f(b)+f((a+b)/2)*4);
}
inline db calc(db l,db r,db val)
{db mid=(l+r)/2,a=simpson(l,mid),b=simpson(mid,r);if(fabs(a+b-val)<eps) return val;return calc(l,mid,a)+calc(mid,r,b);
}
int main()
{scanf("%d%lf",&n,&alpha);int i;db l=1e9,r=-1e9;for(i=0;i<=n;i++){scanf("%lf",&h[i]),h[i]/=tan(alpha);if(i) h[i]+=h[i-1];}for(i=1;i<=n;i++){scanf("%lf",&R[i]),O[i]=h[i-1],l=min(l,O[i]-R[i]),r=max(r,O[i]+R[i]);if(i!=1&&O[i]-O[i-1]>fabs(R[i]-R[i-1])){db a=(R[i-1]-R[i])/(O[i]-O[i-1]),b=sqrt(1-a*a);ax[++m]=O[i-1]+a*R[i-1],ay[m]=b*R[i-1];bx[m]=O[i]+a*R[i],by[m]=b*R[i];}}if(h[n]>O[n]+R[n]){db a=R[n]/(h[n]-O[n]),b=sqrt(1-a*a);r=h[n];ax[++m]=O[n]+a*R[n],ay[m]=b*R[n];bx[m]=h[n],by[m]=0;}printf("%.2lf",calc(l,r,simpson(l,r))*2);return 0;
}//2 0.7853981633 10.0 10.00 10.00 4.00 5.00
转载于:https://www.cnblogs.com/CQzhangyu/p/8595050.html
【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分相关推荐
- BZOJ 1502: [NOI2005]月下柠檬树 simpson积分
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1244 Solved: 662 [Submit][Statu ...
- [BZOJ1502] [NOI2005]月下柠檬树
Description 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地 坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理.李哲是一个喜爱思考的孩 ...
- bzoj1502: [NOI2005]月下柠檬树
题目描述: 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理.李哲是一个喜爱思考的孩子,当他看到在 ...
- [NOI2005]月下柠檬树(计算几何+积分)
题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔 地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思 索着人生的哲理. 李哲是一个喜爱思考的孩子,当他看 ...
- BZOJ 1502 NOI2005 月下柠檬树 Simpson自适应公式
题目大意:给定一棵由圆台和圆锥构成的柠檬树,月光以α的夹角平行射向地面,求阴影部分面积 补充题目大意:看到这题我产生了心理阴影,求阴影部分面积 题目不好分析,但其实就是求一堆圆和一堆梯形的面积交 样例 ...
- bzoj 1502月下柠檬树 Simpson积分
关键点是,水平的圆投影到水平面之后仍然是与原先全等的圆. 然后圆与圆之间通过曲面无缝连接,所以投影下来之后圆与圆之间通过公切线连接. 直接求有点难.把投影区域的上边界当成一个函数,然后套Simpson ...
- [BZOJ1502][NOI2005]月下柠檬树(辛普森积分+解析几何)
题目: 我是超链接 题解: 首先我们理解一下投影的性质,也就是投影出来的图形一定跟原图形全等. 考虑一下圆形投影下来是什么呢?和原来一样的圆形啊 怎么转化竖着的树呢? 也就是树高*cot(α) 那么我 ...
- [BZOJ1502][NOI2005]月下柠檬树(辛普森积分)
=== === 这里放传送门 === === 题解 据说这题正解好像是各种分类讨论一块块求面积? 然而一开始知道这题辛普森积分就可以过但是差一点还是写成了那种分类讨论的方法..就一开始非常无脑求了公切 ...
- 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分
1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1017 Solved: 562 [Submit][Statu ...
最新文章
- 『TensorFlow』函数查询列表_张量属性调整
- 搭建Linux安全的Squid代理服务器
- 群同态基本定理证明_群论(7): 群代数, 群表示基础
- java替换list中元素,Java 实例 - List 元素替换
- 解决:idea - maven project 中 jar 报红线
- eclipse的java帮助文档_java在Eclipse中文apidoc帮助文档导入.doc
- android 自定义圆形pop,Android布局自定义Shap圆形ImageView可以单独设置背景与图片...
- ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
- leetcode24题:两两交换链表的节点
- java证书验证失败_Java 跳过 HTTPS 请求过程中证书验证问题
- 21套非常棒的网页设计图标素材
- VMware 虚拟机安装
- “格力手机”的蝴蝶效应
- 鸿蒙电脑系统连不上打印机,电脑与打印机脱机怎么连接
- 基于rrweb框架对web 页面录制与回放
- 【C#.NET MVC】Deft框架简介与基本使用
- 2015 iMac如何绕过TMP安装Windows11(不用Parallels虚拟机实现macOS与Windows11双系统)
- web测试----死链检查(Xenu)
- 微信故障之后发生的三大怪现象
- 圣科鲁兹 计算机专业,加州大学圣克鲁兹分校计算机工程硕士专业 将发明创新融入到工业中!...
热门文章
- 打开Vscode提示rg.exe占用cpu过高,电脑卡顿
- 如何计算机车启动牵引力,高中物理机车启动的两种方式分析
- 整体思路【路由权限管理方案】
- 常用计算机外部设备有哪些,常用的计算机外设有哪些?
- 关于一台TL-WR885N 4无线路由器不稳定的分析
- 带着问题读 TiDB 源码:Power BI Desktop 以 MySQL 驱动连接 TiDB 报错
- 【硬件专题】案例:热敏打印效果差?为什么是多个因素造成的?
- 拼多多开启“国际直通车”计划,要帮用户提升生活品质
- 如何引流购物粉?如何引流网购粉?怎么吸购物粉?
- Linux之显示系统相关信息