博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #357 (Div. 2) E 计算几何
阅读量:6712 次
发布时间:2019-06-25

本文共 2085 字,大约阅读时间需要 6 分钟。

传说中做cf不补题等于没做 于是第一次补...这次的cf没有做出来DE D题的描述神奇 到现在也没有看懂 于是只补了E 

每次div2都是hack前2~3题 终于打出一次hack后的三题了...希望以后能越来越好 早日..至少变成蓝色名字吧:)

E题意 有一个蟑螂 人要打死它 给出蟑螂的坐标 速度 人的瞄准时间 再给出一些阴影(圆形且给出坐标与半径) 若蟑螂移动到阴影内会立即停下 人不能打到阴影中的蟑螂 问它不被打死的机率 蟑螂的移动方向是随机的

需要注意的是蟑螂只会朝一个方向走直线

所以我们对于每一个阴影圆 都判断一次 能否走到 如果能走到 就计算角度 这里利用atan来实现 atan(x,y) 返回的是平面直角坐标系上原点到x,y的线与x轴的夹角

需要注意的是 在两个圆的相交到一定程度的时候需要进行判断 是否到了最大值 在到达最大值之后 角度会减小 这时候应当取最大的角度 

对于每一个可以到达的阴影 我们都可以得出一个角度区间 最后我们应当对每个区间进行合并 

在angle+-ang之后 可能产生<-pi or >pi的角度 这时候我们进行分割 分成两份 一份在最左 一份在最右

排个序再进行判断就好

在补这道题的时候 acos的时候写错了字母...一路跑到了test79才wa掉...真是..doubility

#include
#include
#include
#include
#include
#include
#include
using namespace std;double x0,yy,v,t;int n;double pi;struct node{ double x,y,r;};node a[100050];int w;struct no{ double k1,k2;};no b[100050];double dis(double x1,double y1,double x2,double y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}double r;void check(int x){ if(dis(a[x].x,a[x].y,x0,yy)>=(r+a[x].r)) return ; double d=dis(a[x].x,a[x].y,x0,yy); /// -pi
=-pi-0.000000000001&&ar<=pi+0.000000000001){ w++; b[w].k1=al; b[w].k2=ar; } else if(al<-pi-0.000000000001){ w++; b[w].k1=-pi; b[w].k2=ar; w++; b[w].k1=pi+(al+pi); b[w].k2=pi; } else if(ar>pi+0.000000000001){ w++; b[w].k1=al; b[w].k2=pi; w++; b[w].k1=-pi; b[w].k2=-pi+(ar-pi); } return ;}int cmp(no a,no b){ return a.k1
b.k2;}int main(){while(cin>>x0>>yy>>v>>t){ pi=acos(-1); cin>>n; bool ok=false; for(int i=1;i<=n;i++){ scanf("%lf%lf%lf",&a[i].x,&a[i].y,&a[i].r); if((x0-a[i].x)*(x0-a[i].x)+(yy-a[i].y)*(yy-a[i].y)<=a[i].r*a[i].r){ ok=true; } } r=v*t; if(ok==true){ printf("1.00000000000\n"); } else { w=0; for(int i=1;i<=n;i++){ check(i); } if(w==0) { printf("0.00000000000\n"); } else { sort(b+1,b+1+w,cmp); double ans=0; double q=-pi; for(int i=1;i<=w;i++) { double l=b[i].k1; double r=b[i].k2; if(r>q){ double ll; if(l>q){ ll=l; } else { ll=q; } if(r-ll>0) ans+=(r-ll); q=r; } else continue; } printf("%.11f\n",ans/(2*pi)); } }}}

  

转载于:https://www.cnblogs.com/rayrayrainrain/p/5592043.html

你可能感兴趣的文章
打印机复印身份证方法
查看>>
MY_使用selenium自动登录126/163邮箱并发送邮件
查看>>
tp框架中的一些疑点知识--cookie和session的配置
查看>>
axios post提交的Content-Type
查看>>
Expected BEGIN_ARRAY but was BEGIN_OBJECT
查看>>
WPF 创建无边框的圆角窗口
查看>>
[java]struts2入门
查看>>
一天:51单片机从入门到一个动态数码管显示数字控制
查看>>
Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
查看>>
Linux模仿了unix的使用习惯
查看>>
EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public?
查看>>
mysql 在linux下的完整安装过程
查看>>
虚拟机找不到/mnt/hgfs挂载目录——debian与 vmware
查看>>
De4Dot+Reflector 支持多种反混淆
查看>>
D3.js 制作中国地图 .net 公共基础类
查看>>
Python VIL Realse
查看>>
视达配色教程8 蓝色的性格是什么样的
查看>>
JsonCpp的简单使用方法
查看>>
boost::asio::io_context类
查看>>
LeapMotion Demo3
查看>>