Simpson法相当好用啊!神奇的骗分算法!

 /**************************************************************
Problem: 1502
User: zhuohan123
Language: C++
Result: Accepted
Time:228 ms
Memory:1312 kb
****************************************************************/ #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const double eps=1e-,pi=3.141592653589793238;
int n;
struct point
{
double x,y;
point(){}
point(double X,double Y){x=X,y=Y;}
};
struct line
{
point s,e;
line(){}
line(point S,point E){s=S,e=E;}
double y(double x){return (e.y*s.x-e.x*s.y-e.y*x+s.y*x)/(s.x-e.x);}
}l[];int lnum;
struct circle{double x,r;}c[];
double h[];
double f(double x)
{
double s=;
for(int i=;i<n;i++)
{
if(abs(x-c[i].x)+eps<c[i].r)s=max(s,sqrt(c[i].r*c[i].r-(x-c[i].x)*(x-c[i].x)));
if(l[i].s.x<x+eps&&l[i].e.x>x-eps)s=max(s,l[i].y(x));
}
return s*;
}
const double dev=1e-;
inline double simpson(double l,double r,double fl,double fm,double fr){return (fl+*fm+fr)/*(r-l);}
double integral(double l,double fl,double m,double fm,double r,double fr,double pre)
{
double lm=(l+m)/,rm=(m+r)/,flm=f(lm),frm=f(rm);
double intl=simpson(l,m,fl,flm,fm),intr=simpson(m,r,fm,frm,fr);
return abs(intl+intr-pre)<dev?intl+intr:integral(l,fl,lm,flm,m,fm,intl)+integral(m,fm,rm,frm,r,fr,intr);
}
int main(int argc, char *argv[])
{
double alp;scanf("%d%lf",&n,&alp);n++;
for(int i=;i<=n;i++)scanf("%lf",&h[i]);
for(int i=;i<n;i++)scanf("%lf",&c[i].r);c[n].r=;
double s=1e10,e=-1e10;
for(int i=;i<=n;i++)
{
h[i]+=h[i-];
c[i].x=h[i]/tan(alp);
s=min(s,c[i].x-c[i].r);
e=max(e,c[i].x+c[i].r);
}
for(int i=;i<n;i++)
{
double dx=c[i+].x-c[i].x,dr=c[i].r-c[i+].r;
if(abs(dx)<abs(dr)+eps)continue ;
l[++lnum]=line(point(c[i].x+c[i].r/dx*dr,sqrt(c[i].r*c[i].r-(c[i].r/dx*dr)*(c[i].r/dx*dr)))
,point(c[i+].x+c[i+].r/dx*dr,sqrt(c[i+].r*c[i+].r-(c[i+].r/dx*dr)*(c[i+].r/dx*dr))));
}
double m=(s+e)/,fm=f(m);
printf("%.2lf\n",integral(s,,m,fm,e,,simpson(s,e,,fm,)));
return ;
}

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

  1. [日常摸鱼]bzoj1502[NOI2005]月下柠檬树-简单几何+Simpson法

    关于自适应Simpson法的介绍可以去看我的另一篇blog http://www.lydsy.com/JudgeOnline/problem.php?id=1502 题意:空间里圆心在同一直线上且底面 ...

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

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

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

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

  4. 【BZOJ-1502】月下柠檬树 计算几何 + 自适应Simpson积分

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

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

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

  6. [NOI2005]月下柠檬树

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

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

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

  8. 【bzoj1502】[NOI2005]月下柠檬树 自适应Simpson积分

    题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思索着人生的哲理.李哲是一个喜爱思考的孩子,当他看到在月 ...

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

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

随机推荐

  1. virtualenv python虚拟环境搭建

    python virtualenv.py flask

  2. try-catch-finally中return语句的执行

    catch里return后还会执行finally吗??在java里,是的.但是值得注意的是,在存在try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch ...

  3. Python常用内建模块

    Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...

  4. jQuery无缝滚动插件

    插件代码 ;(function ($) { // jQuery marquee 插件 $.fn.marquee = function (options) { // 默认设置 var defaults ...

  5. ios多线程的几种创建方式以及基本使用

    1.第一种,NSThread方法,此方法使用很少! 2.NSOperation,面向对象的多线程技术 3. NSObject多线程技术 4.苹果推荐使用的GCD技术 5.GDC中的队列

  6. windows CE 6.0编译报BLDDEMO: There were errors building MY283错误解决办法

    今天开始正式进入windows ce程序开发. 第一次编译windows ce6.0的系统,25分钟编译后报:BLDDEMO: There were errors building MY283 错误. ...

  7. Protocol-RS-232/422/485标准

    引: 通常的微处理器都集成有1路或多路硬件UART通道,可以非常方便地实现串行通讯.在工业控制.电力控制.智能仪表等领域中,也常常使用简便易用的串行通讯方式作为数据交换的手段. 但是,在工业控制等环境 ...

  8. asp.net 间传值的方法

    1.页面间使用post请求时,可以使用Request.Form["xxx"] 2.QueryString 3.Context上下文传值,使用在Server.Transfer中,这个 ...

  9. CRT团队组员博客地址统计

    CRT团队GitHub地址:https://github.com/CoffeeRobotTeam/Coffee-Robot-System 洪超 http://www.cnblogs.com/chaoh ...

  10. 我给女朋友讲编程html系列(2) --Html标题标签h1

    Html是一门标签语言,因此学习Html最快的方式就是学习使用html标签. html标题标签:h1,h2,h3,h4,h5,h6 标题标签总共有6个,h1,h2,h3,h4,h5,h6,从h1到h6 ...