5.21 省选模拟赛 luogu P4207 [NOI2005]月下柠檬树 解析几何 自适应辛普森积分法
LINK:月下柠檬树
之前感觉这道题很鬼畜 实际上 也就想到辛普森积分后就很好做了.
辛普森积分法的式子不再赘述 网上多的是.值得一提的是 这道题利用辛普森积分法的话就是一个解析几何的问题 而并非计算几何.
求面积的并也没有什么好的方法 不能使用半平面交 因为不是一个凸多边形.
决定使用辛普森之后 容易想到 要求出 函数f(x)的式子.
考虑 当x处于一个圆中时 容易求得f(x) 利用勾股定理即可 考虑在梯形内时 容易发现在两圆的公切线上.
求出公切线的解析式就完事了.这个问题 容易使用相似三角形等等解决。
之后需要确定 真正的范围 因为 圆可能向前或者向后覆盖.
辛普森的时候 每次求某个点的f(x)时 需要和圆或者函数取max.
然后就是常规积分了. 最难的可能是在求解析式的时候 需要仔细推.
const int MAXN=1010;
int n;
db A;//光和地面的夹角.
struct wy{db x;db r;}t[MAXN];
struct Line{db k,b,L,R;}q[MAXN];
inline db len(db a,db b)
{
return sq(a*a-b*b);
}
inline void get_tan(int x,int y)
{
if(fabs(r(x)-r(y))<=EPS)
{
q[x].L=x(x);
q[x].R=x(y);
q[x].k=0;q[x].b=r(x);
return;
}
db dx=x(y)-x(x),dr=fabs(r(x)-r(y));
//dx为两圆距离 dr 为那条边的长.
db ly,ry;
if(r(x)>r(y))
{
q[x].L=x(x)+r(x)*dr/dx;//求出cos
q[x].R=x(y)+(q[x].L-x(x))*r(y)/r(x);
ly=len(r(x),q[x].L-x(x));
ry=len(r(y),q[x].R-x(y));
q[x].k=(ry-ly)/(q[x].R-q[x].L);
q[x].b=ly-q[x].L*q[x].k;
}
else
{
q[x].R=x(y)-r(y)*dr/dx;
q[x].L=x(x)-(x(y)-q[x].R)*r(x)/r(y);
ly=len(r(x),q[x].L-x(x));
ry=len(r(y),q[x].R-x(y));
q[x].k=(ry-ly)/(q[x].R-q[x].L);
q[x].b=ly-q[x].L*q[x].k;
}
}
inline db F(db x)
{
db ans=0;
rep(1,n-1,i)if(x<x(i)+r(i)&&x>x(i)-r(i))ans=ans>len(r(i),x-x(i))?ans:len(r(i),x-x(i));
rep(1,n-1,i)if(x>=q[i].L&&x<=q[i].R)ans=ans>q[i].k*x+q[i].b?ans:q[i].k*x+q[i].b;
return ans;
}
db simpson(db a,db b)
{
db c=(a+b)/2.0;
return (b-a)*(F(a)+4*F(c)+F(b))/6.0;
}
db jf(db a,db b,db ans)
{
db c=(a+b)/2.0;
db L=simpson(a,c),R=simpson(c,b);
if(fabs(L+R-ans)<EPS)return L+R;
return jf(a,c,L)+jf(c,b,R);
}
int main()
{
//freopen("1.in","r",stdin);
gt(n);gi(A);//邻=对/tanA.
A=1/tan(A);
gi(x(1));x(1)*=A;
rep(2,n+1,i)gi(x(i)),x(i)*=A,x(i)+=x(i-1);
rep(1,n,i)gi(r(i));r(++n)=0.0;
rep(1,n-1,i)get_tan(i,i+1);
db ll=x(1)-r(1),rr=x(n);
rep(1,n,i)
{
rr=rr<x(i)+r(i)?x(i)+r(i):rr;
ll=ll>x(i)-r(i)?x(i)-r(i):ll;
}
printf("%.2lf\n",2*jf(ll,rr,simpson(ll,rr)));
return 0;
}
5.21 省选模拟赛 luogu P4207 [NOI2005]月下柠檬树 解析几何 自适应辛普森积分法的更多相关文章
- 5.21 省选模拟赛 luogu P4297 [NOI2006]网络收费 树形dp
LINK:网络收费 还是自己没脑子. 早上思考的时候 发现树形dp不可做 然后放弃治疗了. 没有合理的转换问题的模型是我整个人最大的败笔. 暴力也值得一提 爆搜之后可以写成FFT的形式的计算贡献的方法 ...
- 【洛谷】P4207 [NOI2005]月下柠檬树
题解 原来自适应simpson积分是个很简单的东西! 我们尝试分析一下影子,圆的投影还是圆,圆锥的尖投影成一个点,而圆台的棱是圆的公切线,我们把圆心投影出来,发现平面上圆心的距离是两两高度差/tan( ...
- 洛谷P4207 [NOI2005]月下柠檬树(计算几何+自适应Simpson法)
题面 传送门 题解 我还好奇自适应辛普森法干嘛用的呢--突然想起来积分的一个用处就是求曲边图形的面积-- 我们先来考虑一下这些投影是什么形状 一个圆的投影还是它自己 一个圆锥的投影是一个圆加上一个点, ...
- 省选模拟赛 4.26 T1 dp 线段树优化dp
LINK:T1 算是一道中档题 考试的时候脑残了 不仅没写优化 连暴力都打挂了. 容易发现一个性质 那就是同一格子不会被两种以上的颜色染.(颜色就三种. 通过这个性质就可以进行dp了.先按照左端点排序 ...
- 6.6 省选模拟赛 线段 二维数点问题 树套树 CDQ分治
LINK:线段 还是太菜了 没看出这道题真正的模型 我真是一个典型的没脑子选手. 考虑如何查询答案. 每次在一个线段x的状态被更改后 可以发现有影响的是 和x相连那段极长连续1子段. 设这个子段左端点 ...
- 5.20 省选模拟赛 T1 图 启发式合并 线段树合并 染色计数问题
LINK:图 在说这道题之前吐槽一下今天的日子 520 = 1+1+4+514. /cy 这道题今天做的非常失败 一点分都没拿到手 关键是今天的T3 把我整个人给搞崩了. 先考虑 如果得到了这么一张图 ...
- 4.9 省选模拟赛 生成树求和 变元矩阵树定理 生成函数 iDFT 插值法
有同学在loj上找到了加强版 所以这道题是可以交的.LINK:生成树求和 加强版 对于30分 爆搜 可实际上我爆搜只过了25分 有同学使用按秩合并并茶几的及时剪枝通过了30分. const int M ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- @省选模拟赛03/16 - T3@ 超级树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...
随机推荐
- angular入门--自定义过滤器
<html ng-app='app1'> <head> <meta name="generator" content="HTML Tidy ...
- activiti6基础01-如何数据库操作及相关表
官网文档:https://www.activiti.org/userguide/#queryAPI 1. Activit的简单源码解读 activiti的官方文档讲解详细很详细,也很范.按着 ...
- Error: error getting chaincode bytes: failed to calculate dependencies报错解决办法
Error: error getting chaincode bytes: failed to calculate dependencies: incomplete package: github.c ...
- 前端进阶笔记(一)---JS语言通识
一.语言按照语法分类 1.非形式语言:中文 英文 2.形式语言:乔姆斯基谱系(四种文法 上下文包含文法) 0型 无限制文法 1型 上下文相关文法 2型 上下文无关文法 正则文法 二 产生式(BNF) ...
- nginx中的root和alias辨析
root介绍 Syntax: root path; Default: root html; Context: http, server, location, if in location Sets t ...
- redis cluster info显示cluster_state:fail解决方案
1.查看错误信息: 1.1 错误信息(1) 127.0.0.1:7000> get name (error) CLUSTERDOWN The cluster is down 127.0.0.1: ...
- wtforms: remove ' fill out this field'
As of WTForms 2.2 (June 2nd, 2018), fields now render the required attribute if they have a validato ...
- Python之进程、线程、协程篇
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Django框架11 /form组件、modelForm组件
Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...
- 小书MybatisPlus第5篇-Active Record模式精讲
本文为一个系列中的第五节,前四节访问如下地址: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...