【NOI2005】月下柠檬树
来源:互联网 发布:淘宝检测中心 编辑:程序博客网 时间:2024/04/29 14:26
【NOI2005】月下柠檬树
【题目描述】
李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理。
李哲是一个喜爱思考的孩子,当他看到在月光的照射下柠檬树投在地面上的影子是如此的清晰,马上想到了一个问题:树影的面积是多大呢?李哲知道,直接测量面积是很难的,他想用几何的方法算,因为他对这棵柠檬树的形状了解得非常清楚,而且想好了简化的方法。
李哲将整棵柠檬树分成了n 层,由下向上依次将层编号为1,2,…,n。从第1到n-1 层,每层都是一个圆台型,第n 层(最上面一层)是圆锥型。对于圆台型,其上下底面都是水平的圆。对于相邻的两个圆台,上层的下底面和下层的上底面重合。第n 层(最上面一层)圆锥的底面就是第n-1 层圆台的上底面。所有的底面的圆心(包括树顶)处在同一条与地面垂直的直线上。李哲知道每一层的高度为h1,h2,…,hn,第1 层圆台的下底面距地面的高度为h0,以及每层的下底面的圆的半径r1,r2,…,rn。李哲用熟知的方法测出了月亮的光线与地面的夹角为alpha。
为了便于计算,假设月亮的光线是平行光,且地面是水平的,在计算时忽略树干所产生的影子。李哲当然会算了,但是他希望你也来练练手。
【输入】
文件的第1行包含一个整数n 和一个实数alpha,表示柠檬树的层数和月亮的光线与地面夹角(单位为弧度)。
第2行包含n+1个实数h0,h1,h2,…,hn,表示树离地的高度和每层的高度。
第3行包含n个实数r1,r2,…,rn,表示柠檬树每层下底面的圆的半径。
上述输入文件中的数据,同一行相邻的两个数之间用一个空格分隔。
输入的所有实数的小数点后可能包含1至10位有效数字。
【输出】
输出1个实数,表示树影的面积。四舍五入保留两位小数。
【输入样例】
2 0.7853981633
10.0 10.00 10.00
4.00 5.00
【输出样例】171.97
【数据范围】
1≤n≤500,0.3<alpha<π/2,0<hi≤100,0<ri≤100。
10%的数据中,n=1。
30%的数据中,n≤2。
60%的数据中,n≤20。
100%的数据中,n≤500。
【题解】
因为是平行投影,所以每个圆面投下来形状面积都没改变,那就可以先利用alpha的三角函数值把每个圆搬到x轴上,再依次连接相邻两个圆的外公切线,最顶端的三角形可以处理为一个半径为0的圆,然后就得到一个这样的图:
(图不是我画的0.0借用一下望原谅)
这个图形是轴对称的,只用求出上半部分面积就可以了。由于图形是连续的不规则曲线,所以考虑用自适应Simpson算法。Simpson公式是牛顿-科斯特公式的特殊情况,很多地方都能查到,此处不再赘述。在求某一点的函数值(这一点对应曲线上值)时,可以枚举每个圆和每条公切线段,在所有覆盖此点的圆/公切线段上这点对应的值中,最大值就是其函数值了。
公切线与圆的交点需要预处理出来,这里用到初中数学的相似,画一下就出来了。
【代码】
时间复杂度真心算不来0.0或许是精度关系有一个点跑了0.6s……
【NOI2005】月下柠檬树#代码
0 0
- 【NOI2005】月下柠檬树
- BZOJ1502: [NOI2005]月下柠檬树
- Bzoj1502【NOI2005】月下柠檬树
- 1502: [NOI2005]月下柠檬树
- 【计算几何】【NOI2005】月下柠檬树
- bzoj 1502: [NOI2005]月下柠檬树
- 【bzoj1502】 NOI2005—月下柠檬树
- BZOJ 1502([NOI2005]月下柠檬树-Simpson积分)
- [Simpson积分] BZOJ 1502 [NOI2005]月下柠檬树
- [BZOJ1502][NOI2005]月下柠檬树(辛普森积分)
- BZOJ 1502: [NOI2005]月下柠檬树 simpson积分
- BZOJ 1502 NOI2005 月下柠檬树 Simpson自适应公式
- BZOJ 1502 [NOI2005]月下柠檬树 自适应Simpson积分
- bzoj-1502 月下柠檬树
- BZOJ 1502 NOI 2005 月下柠檬树
- BZOJ 1502 NOI 2005 月下柠檬树
- BZOJ 1502 月下柠檬树 自适应辛普森积分
- [BZOJ 1502][NOI 2005]月下柠檬树(自适应Simpson积分)
- Remove Duplicates from Sorted List II
- poj 3414 Pots BFS
- 自己写的无向连通图求割点和桥的代码
- gitlab的用户使用手册
- UVA-12325-Zombie's Treasure Chest
- 【NOI2005】月下柠檬树
- 九度题目1172_哈夫曼树
- 人活着系列之芳姐和芳姐的猪
- [NOIP2013]华容道
- 3D图形:坐标变换
- libnids抓不到包
- C++中如何获取类成员的指针
- RedHat下怎样去设置限定部分的IP访问目标机
- Objective_C语言 类的定义和实现