博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P2510 [HAOI2008]下落的圆盘(计算几何)
阅读量:6658 次
发布时间:2019-06-25

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

题面

题解

对于每个圆,我们单独计算它被覆盖的周长是多少

只有相交的情况需要考虑,我们需要知道相交的那段圆弧的角度,发现其中一个交点和两个圆的圆心可以构成一个三角形且三边都已经知道了,那么我们可以根据余弦定理计算出这段圆弧的余弦进而用\(acos\)计算出角度

然而现在有个尴尬的问题是一段圆弧可能会被多次覆盖。那么我们考虑把相交的圆弧的左右端点用极角来表示,并把这个看成一条线段,那么最后只要求出线段覆盖就行了

顺便注意转化为极角的时候如果极角是负的要加上\(2\pi\),如果这时候\(l>r\),就拆成\([l,2\pi]+[2\pi,r]\)的形式

//minamoto#include
#define R register#define fp(i,a,b) for(R int i=(a),I=(b)+1;i
I;--i)#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)template
inline bool cmax(T&a,const T&b){return a
'9'||ch<'0')(ch=='-')&&(f=-1); for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0'); return res*f;}double readdb(){ R double x=0,y=0.1,f=1;R char ch; while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1); for(x=ch-'0';(ch=getc())>='0'&&ch<='9';x=x*10+ch-'0'); for(ch=='.'&&(ch=getc());ch>='0'&&ch<='9';x+=(ch-'0')*y,y*=0.1,ch=getc()); return x*f;}const int N=2005;const double Pi=acos(-1.0);struct point{double r,x,y;}p[N];struct node{ double l,r; node(){} node(R double ll,R double rr):l(ll),r(rr){} inline bool operator <(const node &b)const{return l
=p[i].r+dis(i,j);}void calc(int pos){ fp(i,pos+1,n)if(in(pos,i))return; top=0; fp(i,pos+1,n){ R double d=dis(pos,i);if(in(i,pos)||p[i].r+p[pos].r<=d)continue; R double t=acos((d*d+p[pos].r*p[pos].r-p[i].r*p[i].r)/(2*p[pos].r*d)); R double b=atan2(p[i].y-p[pos].y,p[i].x-p[pos].x); st[++top]=node(b-t,b+t); st[top].l<0?st[top].l+=2*Pi:0; st[top].r<0?st[top].r+=2*Pi:0; st[top].l>st[top].r?(st[top+1]=node(0,st[top].r),st[top++].r=2*Pi):0; } sort(st+1,st+1+top); R double now=0,tmp=0; fp(i,1,top)now

转载于:https://www.cnblogs.com/bztMinamoto/p/10513288.html

你可能感兴趣的文章
使用Kindeditor上传图片
查看>>
JDBC
查看>>
mvn打包spring工程成jar时报Unable to locate Spring NamespaceHandler for XML schema namespace错误解决办法...
查看>>
【Python】元组
查看>>
localStorage
查看>>
JZ2440 裸机驱动 第14章 ADC和触摸屏接口
查看>>
RvmTranslator6.0
查看>>
javascript三元操作符
查看>>
typedef与define的区别
查看>>
根据外键名称获取外键表名
查看>>
(实用)win7/8修改远程桌面连接默认端口
查看>>
WCF实现REST服务
查看>>
make软件包安装
查看>>
页面开机自启动,页面置顶显示,页面持续获得焦点,鼠标点击器源码
查看>>
centos7配置mono和jexus5.6.2
查看>>
My 1st webUI try
查看>>
mac 浏览器 强刷快捷键
查看>>
[转载]SQL Server行列转换实现
查看>>
Mysql之Centos6.5+Mysql5.6搭建配置
查看>>
Micropython TurnipBit 吃豆小人
查看>>