传送门

Solution 

考虑求每个点的贡献

等价于一个以OA长为半径的圆心为原点的圆在多边形内的弧对应的角度/\(2\pi\)

求弧度可以利用三角剖分

在原点的点要特判,采用射线法就可以了

Code 

#include <bits/stdc++.h>
#define reg register
#define ll long long
#define db double using namespace std; int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} const db eps=1e-6,Pi=acos(-1.);
const int N=1005;
int sign(db x){return ((x>eps)-(x<-eps));} struct P{
db x,y;
P(db x=0,db y=0):x(x),y(y){}
P operator+(P o){return P(x+o.x,y+o.y);}
P operator-(P o){return P(x-o.x,y-o.y);}
P operator *(db o){return P(x*o,y*o);}
P rev(){return P(-x,-y);}
db operator *(P o){return x*o.x+y*o.y;}
db operator ^(P o){return x*o.y-y*o.x;}
db mo(){return sqrt(x*x+y*y);}
db thi(P o){return acos(((*this)*o)/(mo()*o.mo()));}
}s[N],p[N]; db calc(P a,P b,db R)
{
db ras=0;
db f=sign(a^b);
if(sign(max(a.mo(),b.mo())-R)==-1) return 0; db thi=a.thi(b);
db h=fabs((a^b)/(a-b).mo());
if(sign(h-R)>-1) return thi*f; db a0=asin(h/R),a1=a.rev().thi(b-a),a2=b.rev().thi(a-b);
if(sign(a0-a1)==1) ras+=a0-a1;
if(sign(a0-a2)==1) ras+=a0-a2;
return min(ras,thi)*f;
} int chk(P x,P y)
{
if(!sign(x.y)) return sign(x.x)==1;
if(!sign(y.y)) return 0;
if(x.y>y.y) swap(x,y);
if(sign(x.y*y.y)==1) return 0;
P xxx=x+(y-x)*(x.y/(y.y-x.y));
return sign(xxx.x)==1;
} int main()
{
reg int i,j,n,m;
db ans=0.;
n=read(),m=read(); for(i=1;i<=n;++i) p[i].x=read(),p[i].y=read();
for(i=1;i<=m;++i) s[i].x=read(),s[i].y=read();
s[m+1]=s[1]; for(i=1;i<=m;++i)
{
if(!sign(s[i]^s[i+1])) continue;
for(j=1;j<=n;++j)
{
if(!sign(p[j].mo())) continue;
ans+=calc(s[i],s[i+1],p[j].mo());
}
} for(i=1;i<=n;++i)
{
if(sign(p[i].mo())) continue;
int flag=1,cnt=0;
for(j=1;j<=m;++j)
{
if(sign(s[j]^s[j+1])) cnt+=chk(s[j],s[j+1]);
else if(sign(s[j]*s[j+1])<1){flag=0;break;}
}
if(flag&&cnt%2==1) ans+=Pi*2.;
} ans/=(Pi*2.); return 0*printf("%.5lf\n",ans);
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

「PKUSC2018」PKUSC的更多相关文章

  1. [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC

    [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 ...

  2. 【LOJ】#6437. 「PKUSC2018」PKUSC

    题解 我们把这个多边形三角形剖分了,和统计多边形面积一样 每个三角形有个点是原点,把原点所对应的角度算出来,记为theta 对于一个点,相当于半径为这个点到原点的一个圆,圆弧上的弧度为theta的一部 ...

  3. loj#6437. 「PKUSC2018」PKUSC(计算几何)

    题面 传送门 题解 计算几何的东西我好像都已经忘光了-- 首先我们可以把原问题转化为另一个等价的问题:对于每一个敌人,我们以原点为圆心,画一个经过该点的圆,把这个圆在多边形内部的圆弧的度数加入答案.求 ...

  4. LOJ6437. 「PKUSC2018」PKUSC [计算几何]

    LOJ 思路 显然多边形旋转可以变成点旋转,不同的点的贡献可以分开计算. 然后就变成了要求一个圆在多边形内的弧长. 考虑把交点全都求出来,那么两个交点之间的状态显然是相同的,可以直接把圆弧上的中点的状 ...

  5. LOJ#6437. 「PKUSC2018」PKUSC

    题面 题意转化为: 判断每个点所在的圆有多长的弧度角位于多边形内部. 然后就很暴力了. 每个点P,直接找到多边形和这个圆的所有交点,按照距离P的角度排序. 找交点,直接联立二元二次方程组.... 需要 ...

  6. LOJ #6436. 「PKUSC2018」神仙的游戏(字符串+NTT)

    题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 ...

  7. LOJ #6435. 「PKUSC2018」星际穿越(倍增)

    题面 LOJ#6435. 「PKUSC2018」星际穿越 题解 参考了 这位大佬的博客 这道题好恶心啊qwq~~ 首先一定要认真阅读题目 !! 注意 \(l_i<r_i<x_i\) 这个条 ...

  8. LOJ #6432. 「PKUSC2018」真实排名(组合数)

    题面 LOJ #6432. 「PKUSC2018」真实排名 注意排名的定义 , 分数不小于他的选手数量 !!! 题解 有点坑的细节题 ... 思路很简单 , 把每个数分两种情况讨论一下了 . 假设它为 ...

  9. 「PKUSC2018」星际穿越 (70分做法)

    5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 27  Solved: 11[Submit][Status] ...

随机推荐

  1. 关于.Net使用企业库访问MySql数据库

    关于.Net使用企业库访问MySql数据库 在网上看了很多又重写又加WebConfig中的内容,其实不用那么麻烦 企业库5.0访问MySql数据库只需要在Web服务器安装mysql-connector ...

  2. Postman中添加真实请求(Chrome Networks中的全部请求,含https)copy as har

    Postman中添加真实请求(Chrome Networks中的全部请求,含https) xyxzfj 关注 2018.05.22 19:44* 字数 559 阅读 1176评论 0喜欢 0 Post ...

  3. PHP实现智能语音播报

    原文地址 https://www.jianshu.com/p/91a046ec6ebc 大家估计都知道现在很多AI音响能够给你播报天气,叫你起床...甚至能够接受语音指令!所谓的人工智能音响,听起来很 ...

  4. SpringBoot整合定时任务和异步任务处理

    SpringBoot定时任务schedule讲解 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类 timer:配置比较麻烦,时间延后问题, ...

  5. MySQL/MariaDB数据库的半同步复制

      MySQL/MariaDB数据库的半同步复制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL半同步复制概述 1>.MySQL默认的异步复制 默认情况下,M ...

  6. BUUCTF复现记录1

    平台地址:https://buuoj.cn/  里面很多之前的题目,不错的平台.另外幕后大哥博客https://www.zhaoj.in/     以下的解题,都是参考各位大佬的WP去复现,重在记录下 ...

  7. C#锁对象代码

    private static readonly object SequenceLock = new object(); private static readonly object SequenceL ...

  8. mysql根据某一个字段查询数量大于1的数据

    分组条件:org_code select count(1) from qyt_company_info t GROUP BY t.org_code HAVING count(1)>1;

  9. 实验八 《Coderxiaoban团队》团队作业4:基于原型的团队项目需求调研与分析

    实验八 <Coderxiaoban团队>团队作业4:基于原型的团队项目需求调研与分析 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验八 团队作业4:基于 ...

  10. destoon下动态链接301到伪静态(ngnix)

    分享一个destoon6.0/7.0下动态链接301到伪静态上面,实现权重提升. if ($request_uri ~* "^/index.php\?itemid=(\d+)&mod ...