Codeforces Round #357 (Div. 2) E. Runaway to a Shadow 计算几何
E. Runaway to a Shadow
题目连接:
http://www.codeforces.com/contest/681/problem/E
Description
Dima is living in a dormitory, as well as some cockroaches.
At the moment 0 Dima saw a cockroach running on a table and decided to kill it. Dima needs exactly T seconds for aiming, and after that he will precisely strike the cockroach and finish it.
To survive the cockroach has to run into a shadow, cast by round plates standing on the table, in T seconds. Shadow casted by any of the plates has the shape of a circle. Shadow circles may intersect, nest or overlap arbitrarily.
The cockroach uses the following strategy: first he equiprobably picks a direction to run towards and then runs towards it with the constant speed v. If at some moment t ≤ T it reaches any shadow circle, it immediately stops in the shadow and thus will stay alive. Otherwise the cockroach is killed by the Dima's precise strike. Consider that the Dima's precise strike is instant.
Determine the probability of that the cockroach will stay alive.
Input
In the first line of the input the four integers x0, y0, v, T (|x0|, |y0| ≤ 109, 0 ≤ v, T ≤ 109) are given — the cockroach initial position on the table in the Cartesian system at the moment 0, the cockroach's constant speed and the time in seconds Dima needs for aiming respectively.
In the next line the only number n (1 ≤ n ≤ 100 000) is given — the number of shadow circles casted by plates.
In the next n lines shadow circle description is given: the ith of them consists of three integers xi, yi, ri (|xi|, |yi| ≤ 109, 0 ≤ r ≤ 109) — the ith shadow circle on-table position in the Cartesian system and its radius respectively.
Consider that the table is big enough for the cockroach not to run to the table edges and avoid Dima's precise strike.
Output
Print the only real number p — the probability of that the cockroach will stay alive.
Your answer will be considered correct if its absolute or relative error does not exceed 10 - 4.
Sample Input
0 0 1 1
3
1 1 1
-1 -1 1
-2 2 1
Sample Output
0.50000000000
Hint
题意
有一个蟑螂,在x0,y0点,每秒移动,可以移动T秒,T秒后不在阴影中就会被拍死
阴影都是圆,现在给你圆心坐标和圆的半径。
这个蟑螂是随机选择一个方向走的
问你这个蟑螂活下来的概率是多少
题解:
蟑螂和圆都会有一个角度的区间,表示在T秒内能够到达这个阴影中
然后把所有区间拿出来,取并集
然后再除以2pi就好了
思路很简单。
取区间的这个东西,用简单的初中几何知识就能得到。
然后这道题就结束了。
代码
#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-6;
const double pi = acos(-1.0);
double sqr(double x)
{
return x*x;
}
double dis(double x,double y,double x1,double y1)
{
return sqrt(sqr(x-x1)+sqr(y-y1));
}
vector<pair<double,int> >a;
double x,y,v,t,r;
int n;
int main()
{
scanf("%lf%lf%lf%lf",&x,&y,&v,&t);
r=v*t;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
double x0,y0,r0;
scanf("%lf%lf%lf",&x0,&y0,&r0);
double D=dis(x,y,x0,y0);
if(D<=r0)
{
cout<<"1.000000000"<<endl;
return 0;
}
if(r+r0+eps<D)continue;
double angl,angr,ang;
double angm=atan2(y0-y,x0-x);
if(angm<0)angm+=2*pi;
double len1 = sqrt(D*D-r0*r0);
if(len1<r+eps){
ang=asin(r0/D);
}
else{
ang=acos((D*D+r*r-r0*r0)/(2.0*D*r));
}
angl=angm-ang;
angr=angm+ang;
if(angl<0){
a.push_back(make_pair(angl+2*pi,1));
a.push_back(make_pair(2*pi,-1));
a.push_back(make_pair(0,1));
a.push_back(make_pair(angr,-1));
}
else if(angr>2*pi){
a.push_back(make_pair(angl,1));
a.push_back(make_pair(2*pi,-1));
a.push_back(make_pair(0,1));
a.push_back(make_pair(angr-2*pi,-1));
}
else{
a.push_back(make_pair(angl,1));
a.push_back(make_pair(angr,-1));
}
}
sort(a.begin(),a.end());
double ans = 0;
double last = 0;
int now = 0;
for(int i=0;i<a.size();i++)
{
if(now>0)
ans+=a[i].first-last;
last=a[i].first;
now+=a[i].second;
}
printf("%.12f\n",ans/(2*pi));
}
Codeforces Round #357 (Div. 2) E. Runaway to a Shadow 计算几何的更多相关文章
- Codeforces Round #357 (Div. 2) D. Gifts by the List 水题
D. Gifts by the List 题目连接: http://www.codeforces.com/contest/681/problem/D Description Sasha lives i ...
- Codeforces Round #357 (Div. 2) C. Heap Operations 模拟
C. Heap Operations 题目连接: http://www.codeforces.com/contest/681/problem/C Description Petya has recen ...
- Codeforces Round #357 (Div. 2) B. Economy Game 水题
B. Economy Game 题目连接: http://www.codeforces.com/contest/681/problem/B Description Kolya is developin ...
- Codeforces Round #357 (Div. 2) A. A Good Contest 水题
A. A Good Contest 题目连接: http://www.codeforces.com/contest/681/problem/A Description Codeforces user' ...
- Codeforces Round #357 (Div. 2) A
A. A Good Contest time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Codeforces Round #357 (Div. 2) E 计算几何
传说中做cf不补题等于没做 于是第一次补...这次的cf没有做出来DE D题的描述神奇 到现在也没有看懂 于是只补了E 每次div2都是hack前2~3题 终于打出一次hack后的三题了...希望以后 ...
- Codeforces Round #357 (Div. 2) 优先队列+模拟
C. Heap Operations time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Codeforces Round #357 (Div. 2) C
C. Heap Operations time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Codeforces Round #357 (Div. 2) B
B. Economy Game time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
随机推荐
- sqlite3 的insert记录项思路
sqlite3 的insert记录项思路 1.组合一个insert的sql语句 2.判断是否需要立即执行,若不是立刻执行的语句,则插入到待处理的链表中,供后续事务处理时提交.必须有一个专门线程来对事务 ...
- Linux学习笔记-Linux系统简介
Linux学习笔记-Linux系统简介 UNIX与Linux发展史 UNIX是父亲,Linux是儿子. UNIX发行版本 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP P ...
- php 中更简洁的三元运算符 ?:
PHP 三元运算符是对参数赋值时候的一个简洁的主要用法. 一个主要的用法: PHP 三元运算符能够让你在一行代码中描述判定代码, 从而替换掉类似以下的代码: <?php if (isset($v ...
- python中的多进程
具体参考这个博客地址:http://www.cnblogs.com/lxmhhy/p/6052167.html
- java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)
本文知识点(目录):本文下面的“实例及附录”全是DOM解析的相关内容 1.xml解析的含义 2.XML的解析方式 3.xml的解析工具 4.XML的解析原理 5.实例 6 ...
- IE手工导入证书
打开cer文件->欢迎使用证书导入向导->下一步->将所有的证书放入下列存储->受信任的根证书颁发机构->完成
- CF3A 【Shortest path of the king】
一句话题意:在8 * 8的棋盘上,输出用最少步数从起点走到终点的方案 数据很小,可以广搜无脑解决 定义数据结构体 struct pos{ int x,y,s; //x.y表示横纵坐标,s表示步数 ]; ...
- mysql慢sql报警系统
前言:最近有同事反应有的接口响应时间时快时慢,经过排查有的数据层响应时间过长,为了加快定位定位慢sql的准确性,决定简单地搭建一个慢sql报警系统 具体流程如下架构图 第一步:记录日志 每个业务系统都 ...
- SQL SERVER中查询某个表或某个索引是否存在
查询某个表是否存在: 在实际应用中可能需要删除某个表,在删除之前最好先判断一下此表是否存在,以防止返回错误信息.在SQL SERVER中可通过以下语句实现: IF OBJECT_ID(N'表名称', ...
- 20165333实验三 敏捷开发与XP实践
实验内容 一.参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD 安装alibaba 插件,解决代码中的规范问题. 在IDE ...