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

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

#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. Angular 遍历循环数组

    var app = angular.module('Mywind',['ui.router']) app.controller('Myautumn',function($scope,$http,$fi ...

  2. OpenJudge百炼-2747-数字方格-C语言-枚举

    描述:如上图,有3个方格,每个方格里面都有一个整数a1,a2,a3.已知0 <= a1, a2, a3 <= n,而且a1 + a2是2的倍数,a2 + a3是3的倍数, a1 + a2 ...

  3. UVA 11995 STL 使用

    There is a bag-like data structure, supporting two operations: 1 x Throw an element x into the bag. ...

  4. POI2007 MEG-Megalopolis [树状数组]

    MEG-Megalopolis 题目描述 Byteotia has been eventually touched by globalisation, and so has Byteasar the ...

  5. bzoj 4555 [Tjoi2016&Heoi2016]求和 NTT 第二类斯特林数 等比数列求和优化

    [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 679  Solved: 534[Submit][S ...

  6. js 内置对象属性及方法

    1.Date 属性(1): constructor      所建立对象的函数参考 prototype       能够为对象加入的属性和方法 方法(43): getDay()        返回一周 ...

  7. 数据结构之DFS与BFS

    深度搜索(DFS) and  广度搜索(BFS) 代码如下: #include "stdafx.h" #include<iostream> #include<st ...

  8. MySQL 配置文件及逻辑架构

    配置文件: linux:/etc/my.cnf              默认配置文件:/usr/share/mysql/my-default.cnf windows:my.ini 主要日志文件: 二 ...

  9. java基础学习(一)hashcode

    hashcode的作用 hashCode()方法是从Object类继承过来的,Object类中的hashCode()方法返回的是对象在内存中地址转换成的int值,如果对象没有重写hashCode()方 ...

  10. loj6029 「雅礼集训 2017 Day1」市场

    传送门:https://loj.ac/problem/6029 [题解] 考虑如果有一些近似连续的段 比如 2 2 2 3 3 3,考虑在除3意义下,变成0 0 0 1 1 1,相当于整体-2 又:区 ...