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 ...
随机推荐
- 41 - 数据库-pymysql41 - 数据库-pymysql-DBUtils
目录 1 Python操作数据库 2 安装模块 3 基本使用 3.1 创建一个连接 3.2 连接数据库 3.3 游标 3.3.1 利用游标操作数据库 3.3.2 事务管理 3.3.3 执行SQL语句 ...
- linux===sar命令性能监控
sar介绍: sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态.它的特点是可以连 ...
- K/V式枚举
public enum OType { LOGIN { public String getDesc() { return "登录"; } }, ADD { public Strin ...
- JQuery中DOM事件合成用法
jQuery有两个合成事件——hover()方法和toggle()方法 类似前面讲过的ready()方法,hover()方法和toggle()方法都属于jQuery自定义的方法. hover()方法: ...
- POJ 3376 Finding Palindromes(manacher求前后缀回文串+trie)
题目链接:http://poj.org/problem?id=3376 题目大意:给你n个字符串,这n个字符串可以两两组合形成n*n个字符串,求这些字符串中有几个是回文串. 解题思路:思路参考了这里: ...
- C/C++之static
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...
- 第一篇CodeIgniter框架的下载及安装
初次学习Php,网上搜了很多php框架,最后选择了CodeIgniter. 安装环境:php5+mysql6.5+iis7 我的电脑是用来办公写文档用的,win7系统,不想换系统,所以就安装了win7 ...
- C/C++经典面试题
1.指向数组的指针 和 指向数组首元素的指针 2018-03-07 昨天在牛客上看到这么一道C语言面试题,挺经典的,特来分享给大家. 程序如下,问输出结果 #include <stdio.h&g ...
- 【LOJ】#2066. 「SDOI2016」墙上的句子
题解 我一直也不会网络流--orz 我们分析下这道题,显然和行列没啥关系,就是想给你n + m个串 那么我们对于非回文单词之外的单词,找到两两匹配的反转单词(即使另一个反转单词不会出现也要建出来) 具 ...
- Kafka/Metaq设计思想学习笔记
http://my.oschina.net/geecoodeer/blog/194829