[BZOJ1502]月下柠檬树(自适应辛普森积分)

1502: [NOI2005]月下柠檬树

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1387  Solved: 739
[Submit][Status][Discuss]

Description

李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地
坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理。李哲是一个喜爱思考的孩子,当他看到在月光的照射下
柠檬树投在地面上的影子是如此的清晰,马上想到了一个问题:树影的面积是多大呢?李哲知道,直接测量面积是
很难的,他想用几何的方法算,因为他对这棵柠檬树的形状了解得非常清楚,而且想好了简化的方法。李哲将整棵
柠檬树分成了n 层,由下向上依次将层编号为1,2,…,n。从第1到n-1 层,每层都是一个圆台型,第n 层(最上面一
层)是圆锥型。对于圆台型,其上下底面都是水平的圆。对于相邻的两个圆台,上层的下底面和下层的上底面重合
。第n 层(最上面一层)圆锥的底面就是第n-1 层圆台的上底面。所有的底面的圆心(包括树顶)处在同一条与地面垂
直的直线上。李哲知道每一层的高度为h1,h2,…,hn,第1 层圆台的下底面距地面的高度为h0,以及每层的下底面
的圆的半径r1,r2,…,rn。李哲用熟知的方法测出了月亮的光线与地面的夹角为alpha。
为了便于计算,假设月亮的光线是平行光,且地面是水平的,在计算时忽略树干所产生的影子。
李哲当然会算了,但是他希望你也来练练手

Input

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

Output

输出1个实数,表示树影的面积。四舍五入保留两位小数。

Sample Input

2 0.7853981633
10.0 10.00 10.00
4.00 5.00

Sample Output

171.97

HINT

Source

[Submit][Status][Discuss]

这个题的正解是各种分类讨论求面积,但是可以用辛普森积分骗分。
关于辛普森积分的推导可以看 https://www.zhihu.com/question/47728235
其实这个东西很好卡掉,但是对于很多数据还是可以较为精确地出解的。

首先发现要求的东西是轴对称的,这意味着我们可以只求x坐标上面的函数区域没。这个图像的解析式还是很难求,但是对于每个横坐标上对应的函数值可以比较轻松地求出,这个时候就可以用Simpson积分了。
普通辛普森积分根本不可能出解,因为仅仅一个二次函数不可能拟合这么复杂的图像。但是要分成很多份的话时间复杂度又过高,这个时候就需要引入自适应:如果要对[a,b]积分,可以先对[a,b]拟合,再对[a,(a+b)/2]和[(a+b)/2,b]拟合,如果两个相差很小则直接退出,否则继续递归。
个人认为这个方法在这里可以成功很大程度是因为图像中有很多直线围城的区域,而自适应Simpson积分在直线积分方面的表现应该是很不错的。

具体做法看 https://www.cnblogs.com/DaD3zZ-Beyonder/p/5676841.html
上面讲的很清楚了,直接作为模板即可。

 1 #include<cmath>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #define rep(i,l,r) for (int i=l; i<=r; i++)
 5 typedef double db;
 6 using namespace std;
 7 
 8 const int N=1010;
 9 double eps=1e-5,inf=1e12;
10 int n,num;
11 db alpha;
12 struct P{ db x,y; P(db X=0,db Y=0){ x=X; y=Y; } };
13 struct Ci{ db r; P c; Ci (P C=(P(0,0)),db R=0):c(C),r(R){}; }C[N];
14 
15 struct Li{
16     P s,t; db k,b;
17     Li (P S=P(0,0),P T=P(0,0)){
18         s=S,t=T; if (s.x>t.x) swap(s,t);
19         k=(s.y-t.y)/(s.x-t.x); b=s.y-k*s.x;
20     }
21     db f(db x){ return k*x+b; }
22 }l[N];
23 
24 int dcmp(db x){ if (fabs(x)<eps) return 0; return (x<0) ? -1 : 1; } 
25 db F(db x){
26     db res=0;
27     rep(i,1,n){
28         db d=fabs(x-C[i].c.x);
29         if (dcmp(d-C[i].r)>0) continue;
30         db len=2*sqrt(C[i].r*C[i].r-d*d);
31         res=max(res,len);
32     }
33     rep(i,1,num) if (x>l[i].s.x && x<=l[i].t.x) res=max(res,2*l[i].f(x));
34     return res;
35 }
36 
37 db calc(db l,db r){ db mid=(l+r)/2; return (F(l)+F(r)+F(mid)*4)*(r-l)/6; }
38 db Simpson(db l,db r,db now){
39     db mid=(l+r)/2,x=calc(l,mid),y=calc(mid,r);
40     if (!dcmp(now-x-y)) return now; else return Simpson(l,mid,x)+Simpson(mid,r,y);
41 }
42 
43 void solve(){
44     db L=inf,R=-inf;
45     rep(i,1,n+1) L=min(L,C[i].c.x-C[i].r),R=max(R,C[i].c.x+C[i].r);
46     rep(i,1,n){
47         db d=C[i+1].c.x-C[i].c.x;
48         if (dcmp(d-fabs(C[i].r-C[i+1].r))<0) continue;
49         db sina=(C[i].r-C[i+1].r)/d,cosa=sqrt(1-sina*sina);
50         l[++num]=Li(P(C[i].c.x+C[i].r*sina,C[i].r*cosa),P(C[i+1].c.x+C[i+1].r*sina,C[i+1].r*cosa));
51     }
52     printf("%.2lf\n",Simpson(L,R,calc(L,R)));
53 }
54 
55 int main(){
56     scanf("%d%lf",&n,&alpha); db h,r;
57     rep(i,1,n+1)
58         scanf("%lf",&h),C[i]=Ci((P((h/tan(alpha))+C[i-1].c.x,0)),0);
59     rep(i,1,n) scanf("%lf",&r),C[i].r=r;
60     solve();
61     return 0;
62 }

 

转载于:https://www.cnblogs.com/HocRiser/p/8884527.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

擎天出口退税软件_新版申报系统退税申报注意事项

前言&#xff1a;随着税务信息化建设“后金三”时代的不断深入,2019年年底国家税务总局启动出口退税管理系统整合(进入金税三期)项目&#xff0c;经过广东、大连两个地区试点&#xff0c;即将于今年年底前在全国完成金税三期审核系统的上线工作&#xff0c;至此&#xff0c;出口…

pcie 的function_PCIe扫盲——BDF与配置空间

前面的文章中介绍过&#xff0c;每一个PCIe设备可以只有一个功能(Function)&#xff0c;即Fun0。也可以拥有最多8个功能&#xff0c;即多功能设备(Multi-Fun)。不管这个PCIe设备拥有多少个功能&#xff0c;其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应…

dubbo接口快速测试技巧

在分布式系统的开发中&#xff0c;用到了dubbozookeeper技术&#xff0c;最近遇到一个问题&#xff0c;产品上线后&#xff0c;我负责的模块出了问题&#xff0c;某个bean中某个字段的值一直为null&#xff0c;而这个bean是我调用注册在zookeeper上的一个服务查询到的&#xff…

IISASP.NET 站点IP跳转到域名

前言&#xff1a;先到微软的 https://www.iis.net/downloads/microsoft/url-rewrite 下载URL Rewrite 目标&#xff1a;输入ip跳转到域名所在的网站 比如58的115.159.231.173 跳转到https://passport.58.com/login 先看下58的例子 我们在地址栏输入ip之后 箭头指向的地方是跳转…

mysql emoji表情_让MySQL支持Emoji表情 mysql 5.6

最近在做微信相关的项目&#xff0c;其中MySQL 要存储emoji表情&#xff0c;因此发现我们常用的utf8 字符集根本无法存储表情。网上有不少替代方案。本人还是采用了修改MySQL字符集的方案简单快捷。首先将我们数据库默认字符集由utf8 更改为utf8mb4&#xff0c;对应的表默认字符…

::selection

改变浏览器文字选中背景 ::selection CSS的伪类选择器 只有一小部分CSS属性可以用于::selection选择器&#xff1a; color, background-color, cursor, outline, text-decoration, text-emphasis-color和text-shadow。 要特别注意的是&#xff0c;background-image会如同其他属…

python3中的正则模块

本文引至: 正则模块 与正则最相关的应该算是字符串, 但是,在内置的py的str类型中, 并没有内置的正则方法. 我们可以看一下str的基本方法:我觉得最有用的,应该算find,len,split,join 这4个方法了. 但对于字符串操作来说, 这简直too too simple. 所以, py提供了我们一个Re 模块, …

wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...

将php连接到MySQL数据库的方法有很多&#xff0c;在这里我使用的是mysqli_connect方法&#xff0c;此博客所解答的问题汇总&#xff1a;1.wampserver服务器离线但图标为正常绿&#xff1b;2.wampserver 2/3服务正常运行&#xff0c;3个服务分别是哪些&#xff1f;3.wampserver …

问题总结2015/05/05

1、第三方提供的库不能使用。 调查方法&#xff1a;差分编译&#xff0c;对比连接后和编译后的差分情况&#xff1b;Debug单步调试&#xff0c;定位出错代码&#xff1b;由于是第三方库不能使用的原因&#xff0c;反编译辅助调查。 调查结果&#xff1a;本机编译后的R文件中的资…

js的下拉刷新和上拉加载,基于iScroll v4.2.5

html部分 <div id"wrapper" style"height: 100%"><div id"scroller"><div id"pullDown"></div><ul id"thelist"><li>我是三冰 1</li><li>我是三冰 2</li><li>…

java声明和初始化数组_Java 中初始化数组

数组是一种有用的数据类型&#xff0c;用于管理在连续内存位置中建模最好的集合元素。下面是如何有效地使用它们。-- Chris Hermansen&#xff08;作者&#xff09;有使用 C 或者 FORTRAN 语言编程经验的人会对数组的概念很熟悉。它们基本上是一个连续的内存块&#xff0c;其中…

Java第二次实验报告——Java面向对象程序设计

北京电子科技学院&#xff08;BESTI&#xff09;实 验 报 告课程名称&#xff1a;java程序设计实验 班级&#xff1a;1352 姓名&#xff1a;洪韶武 学号&#xff1a;20135219成绩&#xff1a; 指导教师&#xff1a;娄嘉鹏…

IOS 多线程04-GCD详解 底层并发 API

IOS 多线程04-GCD详解 底层并发 API 注&#xff1a;本人是翻译过来&#xff0c;并且加上本人的一点见解。 前言 想要揭示出表面之下深层次的一些可利用的方面。这些底层的 API 提供了大量的灵活性&#xff0c;随之而来的是大量的复杂度和更多的责任。在我们的文章常见的后台实践…

mac pandas文件路径_Mac进阶必看:如何利用Automator快速获取文件路径

在重装mac os系统后&#xff0c;有的小伙伴会选择手动恢复数据&#xff0c;但是却发现一些软件比如FTP、iterm2、foxmail等这些软件的配置信息没有了&#xff0c;其实数据并没有丢失哦&#xff01;一般情形下数据都会在/Users/dcm/Library下&#xff0c;但是Mac默认是不显示这些…

深入分析Spring 与 Spring MVC容器

spring官方文档中对web容器的说明spring配置文件默认名字——applicationContext.xml参考链接&#xff1a;https://www.cnblogs.com/hujunzheng/p/5673377.htmlSpring的启动过程&#xff1a;首先&#xff0c;对于一个web应用&#xff0c;其部署在web容器中&#xff0c;web容器提…

mysql jpa 批注 视图_通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句...

参考: https://blog.csdn.net/qq465235530/article/details/68064074https://www.cnblogs.com/zj0208/p/6008627.html这里主要说一下怎么用jpa映射一个视图的实体类&#xff0c;其实跟表映射一样&#xff0c;就是需要添加一个空的主键id标识package com.cf.bus.core.rs.templat…

javascript继承模式原理与示例深入剖析

原型链ECMAScript 中描述了原型链的概念&#xff0c;并将原型链作为实现继承的主要方法。 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。简单回顾一下构造函数、原型和实例的关系&#xff1a;每个构造函数都有一个原型对象&#xff0c;原型对象都包含一…

mysql innodb_sort_buffer_size_mysql优化---第7篇:参数 innodb_buffer_pool_instances设置

摘要&#xff1a;1 innodb_buffer_pool_instances可以开启多个内存缓冲池&#xff0c;把需要缓冲的数据hash到不同的缓冲池中&#xff0c;这样可以并行的内存读写。2 innodb_buffer_pool_instances参数显著的影响测试结果&#xff0c;特别是非常高的 I/O 负载时。3 实验环境下&…

open-falcon的插件机制

Plugin可以看做是对agent功能的扩充。对于业务系统的监控指标采集&#xff0c;最好不要做成plugin&#xff0c;而是把采集脚本放到业务程序发布包中&#xff0c;随着业务代码上线而上线&#xff0c;随着业务代码升级而升级&#xff0c;这样会比较容易管理。 1. 编写采集脚本 用…

从简单的信道预计说起

前面写了关于CP在OFDM中的应用&#xff0c;主要是记录一点零星的想法而已&#xff0c;今天突然想写点关于信道特性方面的东西。原因有下面几点&#xff1a; 1&#xff09;信道在仿真中的地位不容置疑&#xff0c;不同信道的条件下的仿真是很多课题的重点&#xff0c;自己差点儿…