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

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

#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. vector创建2维数组

    以前我要建立一个二维数组,总是使用 int N=5, M=6; vector<vector<int> > Matrix(N); for(int i =0; i< Matr ...

  2. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) C

    C. Little Artem and Matrix time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  3. Activiti工作流引擎核心介绍

    引言 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于 Java 的超快速.超稳定的 BPMN 2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更 ...

  4. DOM创建和删除节点

    一.创建节点 3步 1.创建空元素对象: var newElem=document.createElement("标签名"); 例如:var a=document.createEl ...

  5. Freewheel Tech interview

    1.聊背景.. 2.聊项目..然饿我的项目是webvr..基本面试官很少会了解这个..应该再多做实习多做些项目.. 3.浏览器输入网址后到页面呈现出来的过程 4.缓存机制, 浏览器如何判断一个图片有没 ...

  6. pychart

    Pychart PyChart is a Python library for creating high quality Encapsulated Postscript, PDF, PNG, or ...

  7. mac air上archlinux的安装及优化

    前言 最近总感觉跑了两年多ubuntu系统的MacBookAir6,2越来越不行了,内存总是亮红灯,软件效率也低了不少.最直接的解决方法当然是换电脑,购买一台配置更好的,比如2017款xps,不过在我 ...

  8. linux中的阻塞机制及等待队列【转】

    转自:http://www.cnblogs.com/gdk-0078/p/5172941.html 阻塞与非阻塞是设备访问的两种方式.驱动程序需要提供阻塞(等待队列,中断)和非阻塞方式(轮询,异步通知 ...

  9. Ubuntu Touch环境搭建

    最近搞了一下Nexus 5的MultiRom Manger,体验了一把Ubuntu Touch和Android L,总体感觉还不错,不过Android L的NFC驱动还有问题,Ubuntu Touch ...

  10. locust===注意事项

    1.安装包在:微盘 2.运行命令是:locust -f load_test.py --host=https://www.baidu.com 3.本地打开的是:http://localhost:8089 ...