春节前后想了好久才在队友的讲解下想明白……

太难讲了,我就不讲了,大概就是考虑直着走到高速上还是斜着走到高速上,然后平移直线和大圆相切,把生成的最大的“桥”和大圆并一下就行了。

#include<cstdio>
#include<cmath>
using namespace std;
#define EPS 0.00000000001
const double PI=acos(-1.0);
double v0,v1,D,T;
double x0,R,x3,x1,Y1,k,b,A,B,C,x2,y2,k2,b2;
double f(double x)
{
return k*x+b-(sqrt(R*R-x*x)-D);
}
double area(double l,double r)
{
return (r-l)/6.0*(f(l)+4.0*f((l+r)/2.0)+f(r));
}
double Sinp(double l,double r)
{
double m=(l+r)*0.5;
double t2=area(l,r),t3=area(l,m)+area(m,r);
if(fabs(t2-t3)<EPS)
return t2;
return Sinp(l,m)+Sinp(m,r);
} double g(double x)
{
return -sqrt(R*R-x*x)+D;
}
double are2(double l,double r)
{
return (r-l)/6.0*(g(l)+4.0*g((l+r)/2.0)+g(r));
}
double Sin2(double l,double r)
{
double m=(l+r)*0.5;
double t2=are2(l,r),t3=are2(l,m)+are2(m,r);
if(fabs(t2-t3)<EPS)
return t2;
return Sin2(l,m)+Sin2(m,r);
} double w(double x)
{
return -sqrt(R*R-x*x)-D-(k*x+b);
}
double are3(double l,double r)
{
return (r-l)/6.0*(w(l)+4.0*w((l+r)/2.0)+w(r));
}
double Sin3(double l,double r)
{
double m=(l+r)*0.5;
double t2=are3(l,r),t3=are3(l,m)+are3(m,r);
if(fabs(t2-t3)<EPS)
return t2;
return Sin3(l,m)+Sin3(m,r);
} double sqr(double x)
{
return x*x;
}
int main()
{
//freopen("a.in","r",stdin);
int zu=0;
while(scanf("%lf%lf%lf%lf",&v0,&v1,&D,&T)!=EOF)
{
++zu;
x0=-D*v1/v0+v1*T;
R=v0*T;
x3=sqrt(R*R-D*D);
x1=sqr(T*v0-D)/x0;
Y1=sqrt(sqr(T*v0-D)-x1*x1);
k=Y1/(x1-x0);
b=R*sqrt(1.0+k*k)-D;
x0=-b/k;
k2=-1.0/k;
b2=-D;
A=1.0+k2*k2;
B=2.0*(b2+D)*k2;
C=sqr(b2+D)-R*R;
x2=(-B+sqrt(B*B-4.0*A*C))/(2.0*A);
y2=k*x2+b;
if(y2<EPS)
{
printf("Case %d: %.8lf\n",zu,PI*R*R);
continue;
}
double __area=Sinp(x2,x3)+(x0-x3)*(k*x3+b)*0.5; k=-k;
b=-b;
A=1.0+k*k;
B=2.0*(b+D)*k;
C=sqr(b+D)-R*R;
x2=(-B+sqrt(B*B-4.0*A*C))/(2.0*A);
y2=k*x2+b;
if(y2+D>(-EPS))
__area+=(Sin2(x3,x2)+(x0-x2)*(k*x2+b)*(-0.5));
else
__area+=(Sin2(x3,R)+Sin3(x2,R)+(x0-R)*(k*R+b)*(-0.5));
printf("Case %d: %.8lf\n",zu,__area*2.0+PI*R*R);
}
return 0;
}

【计算几何】【辛普森积分法】UVALive - 7076 - Highway的更多相关文章

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

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

  2. BZOJ2178 圆的面积并 计算几何 辛普森积分

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2178.html 题目传送门 - BZOJ2178 题意 给出 $n(n\leq 1000)$ 个圆,求 ...

  3. UVALive 3835:Highway(贪心 Grade D)

    VJ题目链接 题意:平面上有n个点,在x轴上放一些点,使得平面上所有点都能找到某个x轴上的点,使得他们的距离小于d.求最少放几个点. 思路:以点为中心作半径为d的圆,交x轴为一个线段.问题转换成用最少 ...

  4. 计算科学(转自wiki)

    计算科学(也称科学计算 scientific computation 或 SC)是一个快速增长的多学科领域,使用先进的计算能力来理解和解决复杂的问题. 计算科学包括三个不同的方面: 1. 开发用于解决 ...

  5. ZOJ 3898 - Stean 积分

    有一个陶罐,陶罐是由函数Y=2+cosX,截取x=Z1到x=Z2段后,形成的旋转体,陶罐只有底x=Z1,没有盖子. 问陶罐能乘多少的水(体积),以及它的表面积 体积还是比较好求的,直接用旋转体体积公式 ...

  6. R语言数值积分

    前两天对学习了R里面计算的基本范围,以及一些求解方程的方法,今天来看看积分,其实上个学期学了数值分析,对这部分的算法是有所了解的,当时是用matlab写了一遍,已经忘了怎么实现的了,现在用R重新写一遍 ...

  7. [CSU1806]Toll

    题目:Toll 传送门:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1806 题目简述:给定n个点m条有向边的有向图,每条边的花费是$b_i ...

  8. Simpson公式的应用(HDU 1724/ HDU 1071)

    辛普森积分法 - 维基百科,自由的百科全书 Simpson's rule - Wikipedia, the free encyclopedia 利用这个公式,用二分的方法来计算积分. 1071 ( T ...

  9. UVALIVE 5893 计算几何+搜索

    题意:很复杂的题意,我描述不清楚. 题目链接:http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=3033#problem/33526 大致是,给定一个起 ...

随机推荐

  1. 如何用PhotoShop制作网站的favicon.ico

    所谓favicon,即Favorites Icon的缩写,顾名思义,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站.当然,这不仅仅是Favicon的全部,根据浏览器的不同 ...

  2. bzoj 4624 农场种植 fft

    4624: 农场种植 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 48  Solved: 31[Submit][Status][Discuss] D ...

  3. linux网络编程系列-TCP/IP模型

    ### OSI:open system interconnection ### 开放系统互联网模型是由ISO国际标准化组织定义的网络分层模型,共七层 1. 物理层:物理定义了所有电子及物理设备的规范, ...

  4. checkbox和后面文字无法居中对齐的解决方案

    制作前端页面时,表单的页面中都存在表单元素与提示文字无法对齐的问题.下面是针对这一问题的解决方案: 先上结果图看效果,吼吼~ 最上面两个是经过css处理后的效果,已经居中对齐了哦~,最后一个是没有处理 ...

  5. 修改nginx对http请求数据大小限制

    1. 问题发现 在公司搭建了一个基于mindoc的wiki知识库,用nginx做的反向代理服务器,同事在使用过程中上传某个文件一直失败,于是看着看下mindoc自己的日志文件,发现都是类似于fastd ...

  6. CentOS 7 主机加固手册-上

    TIPs: 世界上有一撮人专门研究主机安全加固基线,有兴趣的读者可以到 http://benchmarks.cisecurity.org/ 获取更加详细专业的主机安全基线配置文档.或者到 https: ...

  7. 【 学习笔记 】memcached基础知识

    源地址:http://kb.cnblogs.com/page/42731/ 仔细学习了下,以下是记录的笔记备忘内容. 一.memcached是什么?    memcached是高性能的分布式内存缓存服 ...

  8. 《Java编程思想》笔记 第十四章 类型信息

    1.RTTI:在运行时识别一个对象类型 JAVA在运行时 有时要 识别对象和类的信息这个机制叫RTTI.Java提供了两种机制去做这件事.传统的RTTI 和 反射. 传统的RTTI  假定编译时就已经 ...

  9. Docker容器进入的4种方式(转)

    这个文章不错,几种方式及使用范围都讲得清楚. 另外,还有一个文章说了为什么docker中并不合适ssh服务安装的情况. 我现在也是用第四种方式, docker exec -it [docker容器ID ...

  10. easyui中导航菜单accordion与tree的动态添加

    博客分类: Java Web开发   Js代码   $.parser.parse(); $.ajax({ url:my.bp()+'/main/menuaction!createMenu.action ...