Description

Input

文件的第1行包含一个整数n和一个实数alpha,表示柠檬树的层数和月亮的光线与地面夹角(单位为弧度)。第2行包含n+1个实数h0,h1,h2,…,hn,表示树离地的高度和每层的高度。第3行包含n个实数r1,r2,…,rn,表示柠檬树每层下底面的圆的半径。上述输入文件中的数据,同一行相邻的两个数之间用一个空格分隔。输入的所有实数的小数点后可能包含1至10位有效数字。
Output

输出1个实数,表示树影的面积。四舍五入保留两位小数。
Sample Input
2 0.7853981633
10.0 10.00 10.00
4.00 5.00
Sample Output
171.97
HINT

1≤n≤500,0.3

存个simpson模板

 uses math;
const
maxn=;
eps=1e-7;
var
x,rr,fx1,fy1,fx2,fy2,k:array[..maxn]of double;
n:longint;
a,l,r,m,fl,fr,fm:double; function simpson(l,r,fl,fr,fm:double):double;
begin
exit((r-l)/*(fl+fr+*fm));
end; function f(a:double):double;
var
i:longint;
begin
f:=;
for i:= to n do
begin
if abs(a-x[i])<rr[i] then f:=max(f,sqrt(sqr(rr[i])-sqr(a-x[i])));
if (a>fx1[i]) and (a<fx2[i]) then f:=max(f,fy1[i]+(a-fx1[i])*k[i]);
end;
end; function area(l,m,r,fl,fm,fr,pre:double):double;
var
ll,rr,fll,frr,ls,rs:double;
begin
ll:=(l+m)/;rr:=(m+r)/;fll:=f(ll);frr:=f(rr);
ls:=simpson(l,m,fl,fm,fll);rs:=simpson(m,r,fm,fr,frr);
if abs(ls+rs-pre)<eps then exit(pre);
exit(area(l,ll,m,fl,fll,fm,ls)+area(m,rr,r,fm,frr,fr,rs));
end; procedure main;
var
i:longint;
begin
read(n,a);a:=/tan(a);
for i:= to n+ do read(x[i]);
for i:= to n+ do x[i]:=x[i]+x[i-];
for i:= to n+ do x[i]:=x[i]*a;
for i:= to n do read(rr[i]);
r:=x[n+];l:=x[n+];
for i:= to n do
begin
if x[i]-rr[i]<l then l:=x[i]-rr[i];
if x[i]+rr[i]>r then r:=x[i]+rr[i];
end;
for i:= to n do
if (x[i]-rr[i]<x[i+]-rr[i+]) and (x[i]+rr[i]<x[i+]+rr[i+]) then
begin
fx1[i]:=x[i]+rr[i]*(rr[i]-rr[i+])/(x[i+]-x[i]);fy1[i]:=sqrt(sqr(rr[i])-sqr(fx1[i]-x[i]));
fx2[i]:=x[i+]+rr[i+]*(rr[i]-rr[i+])/(x[i+]-x[i]);fy2[i]:=sqrt(sqr(rr[i+])-sqr(fx2[i]-x[i+]));
if abs(fx2[i]-fx1[i])>eps then k[i]:=(fy2[i]-fy1[i])/(fx2[i]-fx1[i]);
end;
m:=(l+r)/;fl:=f(l);fr:=f(r);fm:=f(m);
writeln(*area(l,m,r,fl,fm,fr,simpson(l,r,fl,fr,fm))::);
end; begin
main;
end.

1502: [NOI2005]月下柠檬树 - BZOJ的更多相关文章

  1. BZOJ 1502: [NOI2005]月下柠檬树 [辛普森积分 解析几何 圆]

    1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1070  Solved: 596[Submit][Status] ...

  2. [BZOJ 1502] [NOI2005] 月下柠檬树 【Simpson积分】

    题目链接: BZOJ - 1502 题目分析 这是我做的第一道 Simpson 积分的题目.Simpson 积分是一种用 (fl + 4*fmid + fr) / 6 * (r - l) 来拟合 fl ...

  3. 1502: [NOI2005]月下柠檬树

    一堆圆台平行光的投影 在草稿纸上画一下,发现对于一个圆,它投影完还是一个半径不变的圆. 定义树的轴在投影平面上经过的点为原点,定一个正方向,建立平面直角坐标系, 能发现,对于一个半径为\(r\),高度 ...

  4. [NOI2005]月下柠檬树[计算几何(simpson)]

    1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1169  Solved: 626[Submit][Status] ...

  5. [NOI2005]月下柠檬树

    题意 F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser  autoint Logout 捐赠本站 Probl ...

  6. 【BZOJ1502】[NOI2005]月下柠檬树 Simpson积分

    [BZOJ1502][NOI2005]月下柠檬树 Description 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树 ...

  7. 【bzoj 1502】月下柠檬树

    月下柠檬树 题意 求n个圆与他们的公切线的定积分. 解法 求出圆的公切线就可以了. 特别坑的一点 : 最两端的圆,有可能会被其他的圆所包含,所以要重新求一下最左端与最右端. 比较坑的一点 : 精度要设 ...

  8. 5.21 省选模拟赛 luogu P4207 [NOI2005]月下柠檬树 解析几何 自适应辛普森积分法

    LINK:月下柠檬树 之前感觉这道题很鬼畜 实际上 也就想到辛普森积分后就很好做了. 辛普森积分法的式子不再赘述 网上多的是.值得一提的是 这道题利用辛普森积分法的话就是一个解析几何的问题 而并非计算 ...

  9. BZOJ1502:[NOI2005]月下柠檬树——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1502 https://www.luogu.org/problemnew/show/P4207 李哲 ...

随机推荐

  1. 二十、Android -- SDcard文件读取和保存

    背景                                                                                            一些东西可以 ...

  2. cocos2d-x一些核心概念截杀

    Cocos2d-x中有很多概念,这些概念很多来源于动画.动漫和电影等行业,例如:导演.场景和层等概念,当然也有些有传统的游戏的概念.Cocos2d-x中核心概念:导演, 场景,层,节点,精灵,菜单动作 ...

  3. C++ 11 之推导关键词

    C++ 11新增了两个推导关键词,auto & decltype 1.区别 auto:用于推导变量类型: decltype: 用于推导表达式或者函数返回值 2.直接上代码 intmain() ...

  4. 关于MD5加密的小知识

    - (NSString *)MD5Hash { const char *cStr = [self UTF8String]; unsigned char result[16]; CC_MD5(cStr, ...

  5. linux中的文件属性

    l 是链接d 是目录c 是字符设备文件b 是块设备- 是文件

  6. 而在Jquery中则使用$.map()、$.each()来操作数组

    首先是普通的数组(索引为整数的数组): //$.map(arr,fn); //对数组中的每个元素调用fn函数逐个进行处理,fn函数将处理返回最后得到的一个新的数组 var arr = [9, 8, 7 ...

  7. WInform启动另一个项目传值

    背景:从A项目中登陆后,跳转到B项目的某个页面(B不再登陆). A项目启动进程: public Form1() { InitializeComponent(); } #region 调用进程 [Dll ...

  8. 层叠水平(stacking level)

    运用上图的逻辑,上面的题目就迎刃而解,inline-blcok 的 stacking level 比之 float 要高,所以无论 DOM 的先后顺序都堆叠在上面. 不过上面图示的说法有一些不准确,按 ...

  9. C# 编写Window服务基础(一)

    一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT.Windows 2000和Windows XP等操作系统下用户环境以外的程序.在以前,编写Wind ...

  10. mac OS X下制定ll指令

    ll作为ls -l的快捷方式,但系统本身没有,需要通过如下方法生成 1.在用户目录下新建.bash_profile文件 # vim .bash_profile 2.添加内容 alias ll = 'l ...