带劲的计算几何[这一定是我WC之前开的最后一道计几!!! 每个点画个圆然后看一下交点 然后判断是多边形内还是多边形外 这个就是取圆上中点然后射线法 eps我1e-8才过 不知道为啥有的人说只能开1e-3 写了三天带劲= = 还有注意long double!附了一组数据~ //Love and Freedom. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #def…
题目大意:给你一个m个点的简单多边形.对于每个点i∈[1,n],作一个以O点为原点且过点i的圆,求该圆在多边形内的圆弧长度/圆长. 其中n≤200,m≤500. 我们将n个点分开处理. 首先,我们要判断需处理的圆,是否被包含在多边形内,或者圆把多边形包含了. 我们显然可以从原点出发,向上作一条x=0的射线,判断该射线与多边形有多少个交点. 显然,若交点数量为奇数个,那么该点就在多边形内,否则在多边形外. 若圆与多边形存在交点,我们对多边形的每条边,求出其与圆,有多少个交点(0个,1个,2个,其实…
LOJ 思路 显然多边形旋转可以变成点旋转,不同的点的贡献可以分开计算. 然后就变成了要求一个圆在多边形内的弧长. 考虑把交点全都求出来,那么两个交点之间的状态显然是相同的,可以直接把圆弧上的中点的状态求出来. 求圆弧上的中点也要特判两个向量恰好相反,或是转的角度大于\(\pi\). 然后求交点--求出和直线的交点再判一下在线段上即可. 然而--有一种较为恶心的情况:没有交点或是只有一个交点,此时可能圆把多边形包住了,也可能是被包住了. 判一下这个点随机转某个角度后是否在多边形内即可. 还要特判…
题面 传送门 题解 计算几何的东西我好像都已经忘光了-- 首先我们可以把原问题转化为另一个等价的问题:对于每一个敌人,我们以原点为圆心,画一个经过该点的圆,把这个圆在多边形内部的圆弧的度数加入答案.求总的度数是多少 因为这是个简单多边形,我们可以把它给三角形剖分.就是说把每条边都和原点构成一个三角形,然后对圆计算这个三角形的贡献,根据这条边的顺逆时针顺序来决定贡献要加上还是减去.易知最后的贡献就是这个多边形的贡献 那么我们对于每一个圆,暴力枚举多边形的一条边和原点构成的三角形,然后判一下圆弧和三…
[LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 \(x_i,y_i\).可怜有一个技能是在平面上画一个 \(m\) 个点的简单多边形,并消灭所有严格在多边形内部的敌人. 不难发现如果想要快速的消灭敌人的话,只要画一个足够大的简单多边形就行了.但是这样的游戏性就太差了.于是可怜打算为游戏增加一定的随机性. 可怜在平面上随便画了一个 \(m\) 个点…
题解 我们把这个多边形三角形剖分了,和统计多边形面积一样 每个三角形有个点是原点,把原点所对应的角度算出来,记为theta 对于一个点,相当于半径为这个点到原点的一个圆,圆弧上的弧度为theta的一部分 相当于一条直线和这个小圆弧求交,直接算出有交的角度然后累加最后除2PI即可 可以拿余弦定理爆算(反着也不是你自己算 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,in…
旋转多边形是没有前途的,我们考虑旋转敌人,那么答案就是所有人的可行区间长度之和除以$2\pi$ 首先对每个敌人找到那些旋转后会落到多边形上的角度,实际上就是圆和一些线段求交,解方程即可,注意判一下落在多边形端点上的情况 把角度排序,每相邻两个角度构成一个区间,在区间内随便取一个角度,把敌人旋转这个角度,判断敌人是否在多边形内,如果是那么整个区间都是可行的 旋转直接套公式:$\left[\matrix{x'\\y'}\right]=\left[\matrix{\cos\theta&-\sin\th…
传送门 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…
题面 题意转化为: 判断每个点所在的圆有多长的弧度角位于多边形内部. 然后就很暴力了. 每个点P,直接找到多边形和这个圆的所有交点,按照距离P的角度排序. 找交点,直接联立二元二次方程组.... 需要判断一段弧是否在多边形内部. 向量随机旋转角度,判断点是否在多边形内部即可. 如果该点在多边形边上,返回-1,重新旋转. 由于double,所以不会出现射线在多边形边上情况. 注意: (0,0)要特判是否在多边形内部.+eps判断 #include<bits/stdc++.h> #define r…
5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 27  Solved: 11[Submit][Status][Discuss] Description 有n个星球,它们的编号是1到n,它们坐落在同一个星系内,这个星系可以抽象为一条数轴,每个星球都是数轴上的一个点, 特别地,编号为i的星球的坐标是i. 一开始,由于科技上的原因,这n个星球的居民之间无法进行交流,因此他们也不知道彼此的存在. 现在,这些星球独…