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]月下柠檬树 解析几何 自适应辛普森积分法的更多相关文章

  1. 5.21 省选模拟赛 luogu P4297 [NOI2006]网络收费 树形dp

    LINK:网络收费 还是自己没脑子. 早上思考的时候 发现树形dp不可做 然后放弃治疗了. 没有合理的转换问题的模型是我整个人最大的败笔. 暴力也值得一提 爆搜之后可以写成FFT的形式的计算贡献的方法 ...

  2. 【洛谷】P4207 [NOI2005]月下柠檬树

    题解 原来自适应simpson积分是个很简单的东西! 我们尝试分析一下影子,圆的投影还是圆,圆锥的尖投影成一个点,而圆台的棱是圆的公切线,我们把圆心投影出来,发现平面上圆心的距离是两两高度差/tan( ...

  3. 洛谷P4207 [NOI2005]月下柠檬树(计算几何+自适应Simpson法)

    题面 传送门 题解 我还好奇自适应辛普森法干嘛用的呢--突然想起来积分的一个用处就是求曲边图形的面积-- 我们先来考虑一下这些投影是什么形状 一个圆的投影还是它自己 一个圆锥的投影是一个圆加上一个点, ...

  4. 省选模拟赛 4.26 T1 dp 线段树优化dp

    LINK:T1 算是一道中档题 考试的时候脑残了 不仅没写优化 连暴力都打挂了. 容易发现一个性质 那就是同一格子不会被两种以上的颜色染.(颜色就三种. 通过这个性质就可以进行dp了.先按照左端点排序 ...

  5. 6.6 省选模拟赛 线段 二维数点问题 树套树 CDQ分治

    LINK:线段 还是太菜了 没看出这道题真正的模型 我真是一个典型的没脑子选手. 考虑如何查询答案. 每次在一个线段x的状态被更改后 可以发现有影响的是 和x相连那段极长连续1子段. 设这个子段左端点 ...

  6. 5.20 省选模拟赛 T1 图 启发式合并 线段树合并 染色计数问题

    LINK:图 在说这道题之前吐槽一下今天的日子 520 = 1+1+4+514. /cy 这道题今天做的非常失败 一点分都没拿到手 关键是今天的T3 把我整个人给搞崩了. 先考虑 如果得到了这么一张图 ...

  7. 4.9 省选模拟赛 生成树求和 变元矩阵树定理 生成函数 iDFT 插值法

    有同学在loj上找到了加强版 所以这道题是可以交的.LINK:生成树求和 加强版 对于30分 爆搜 可实际上我爆搜只过了25分 有同学使用按秩合并并茶几的及时剪枝通过了30分. const int M ...

  8. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  9. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

随机推荐

  1. requirejs之demo

    具体的理论就不讲了,可以参考 http://www.ruanyifeng.com/blog/2012/10/javascript_module.html http://www.ruanyifeng.c ...

  2. windows快速安装redis

    下载地址:https://github.com/microsoftarchive/redis/releases 下载解压,命令行:redis-server.exe redis.windows.conf

  3. List集合-01.ArrayList

    1.ArrayList 1.1 实现了Access接口 实现标记接口Access有以下特点: 目的是允许通用算法提供良好的性能 当遍历方式不同,速度不同时,通常需要继承这个接口 1.2 ArrayLi ...

  4. (二)ELK Filebeat简介

    Filebeat简介   轻量级的日志传输工具,是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且 ...

  5. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  6. 洛谷P2566 [SCOI2009]围豆豆(状压dp+spfa)

    题目传送门 题解 Σ(っ °Д °;)っ 前置知识 射线法:从一点向右(其实哪边都行)水平引一条射线,若射线与路径的交点为偶数,则点不被包含,若为奇数,则被包含.(但注意存在射线与路径重合的情况) 这 ...

  7. JVM内存管理——总结篇

    JVM内存管理--总结篇 自动内存管理--总结篇 内存划分及作用 常见问题 内存划分及作用 程序计数器 线程私有.字节码行号指示器. 执行Java方法,计数器记录的是字节码指令地址:执行本地(Nati ...

  8. Uni-app实战项目注意事项

    注意: (1)本地开启端口 App running at: Local: http://localhost:8080/ Network: http://192.168.31.43:8080/ 后台人员 ...

  9. Xshell6 优化

    Xshell6 优化

  10. SpringBoot集成MyBatis小记

    SpringBoot集成MyBatis小记 参考MyBatis官网 1. 添加maven依赖 添加到pom.xml <dependency> <groupId>org.myba ...