「SCOI2015」小凸想跑步

最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质

实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了


Code:

#include <cstdio>
#include <cmath>
#include <algorithm>
#define Vector Point
const int N=2e5+10;
const double eps=1e-7;
int n,m,l,r;
struct Point
{
double x,y;
Point(){}
Point(double X,double Y){x=X,y=Y;}
double angle(){return atan2(y,x);}
Vector friend operator +(Vector a,Vector b){return Vector(a.x+b.x,a.y+b.y);}
Vector friend operator -(Vector a,Vector b){return Vector(a.x-b.x,a.y-b.y);}
Vector friend operator *(Vector a,double b){return Vector(a.x*b,a.y*b);}
}bee[N],q1[N];
struct Line
{
Point s,t;double ang;
Line(){}
Line(Point S,Point T){s=S,t=T,ang=(t-s).angle();}
}yuu[N],q2[N];
double Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
bool isrig(Line a,Point b){return Cross(b-a.s,a.t-a.s)>0;}
bool cmp(Line a,Line b){return fabs(a.ang-b.ang)<eps?isrig(a,b.t):a.ang<b.ang;}
Point jd(Line a,Line b){return a.s+(a.t-a.s)*(Cross(a.s-b.s,b.t-b.s)/Cross(b.t-b.s,a.t-a.s));}
void SI()
{
std::sort(yuu+1,yuu+1+m,cmp);
q2[l=r=1]=yuu[1];
for(int i=2;i<=m;i++)
if(fabs(yuu[i].ang-yuu[i-1].ang)>eps)
{
while(l<r&&isrig(yuu[i],q1[r-1])) --r;
while(l<=r&&isrig(yuu[i],q1[l])) ++l;
q1[r]=jd(q2[r],yuu[i]);
q2[++r]=yuu[i];
}
while(l<r&&isrig(q2[l],q1[r-1])) --r;
q1[r]=jd(q2[l],q2[r]);
}
double area()
{
if(r-l<2) return 0;
double ret=0;
for(int i=l;i<r;i++) ret+=Cross(q1[i],q1[i+1]);
ret+=Cross(q1[r],q1[l]);
return ret/2;
}
int main()
{
scanf("%d",&n);m=n;double sum=0;
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&bee[i].x,&bee[i].y);
yuu[i]=Line(bee[i-1],bee[i]);
if(i!=1) sum+=Cross(bee[i-1],bee[i]);
}
yuu[1]=Line(bee[n],bee[1]);
sum+=Cross(bee[n],bee[1]);
sum/=2;
bee[++n]=bee[1];
for(int i=3;i<=n;i++)
{
double A=bee[1].y-bee[2].y-(bee[i-1].y-bee[i].y);
double B=bee[2].x-bee[1].x-(bee[i].x-bee[i-1].x);
double C=Cross(bee[1],bee[2])-Cross(bee[i-1],bee[i]);
if(fabs(A)<eps) yuu[++m]=Line(Point(0,-C/B),Point(0,-C/B)+Vector(-B,A));
else yuu[++m]=Line(Point(-C/A,0),Point(-C/A,0)+Vector(-B,A));
}
SI();
printf("%.4f\n",area()/sum);
return 0;
}

2019.3.4

「SCOI2015」小凸想跑步 解题报告的更多相关文章

  1. loj #2008. 「SCOI2015」小凸想跑步

    #2008. 「SCOI2015」小凸想跑步   题目描述 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 n nn 边形,N NN 个顶点按照逆时针从 0∼n−1 0 ...

  2. 「SCOI2015」小凸解密码 解题报告

    「SCOI2015」小凸解密码 题意:给一个环,定义一段连续的极长\(0\)串为\(0\)区间,定义一个位置的离一个\(0\)区间的距离为这个位置离这个区间中\(0\)的距离的最小值,每次询问一个位置 ...

  3. 「SCOI2015」小凸玩矩阵 解题报告

    「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...

  4. 「SCOI2015」小凸玩密室 解题报告

    「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...

  5. 【LOJ】 #2008. 「SCOI2015」小凸想跑步

    题解 一道想法很简单的计算几何(由于我半平面交总是写不对,我理所当然的怀疑半平面交错了,事实上是我直线建错了) 首先我们对于两个凸包上的点设为\((x_0,y_0)\)和\((x_1,y_1)\)(逆 ...

  6. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  7. loj #2006. 「SCOI2015」小凸玩矩阵

    #2006. 「SCOI2015」小凸玩矩阵   题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 ...

  8. loj#2009.「SCOI2015」小凸玩密室

    题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...

  9. AC日记——「SCOI2015」小凸玩矩阵 LiBreOJ 2006

    「SCOI2015」小凸玩矩阵 思路: 二分+最大流: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300 ...

随机推荐

  1. 我的第一个Go web程序 纪念一下

    参考Go web编程,很简单的程序: 大致的步骤: 绑定ip和端口 绑定对应的处理器或者处理器函数,有下面两种选择,选择一种即可监听ip及端口 处理器: 定义一个struct结构体 然后让这个结构体实 ...

  2. jmeter高并发设计方案(转)

    高并发设计方案二(秒杀架构) 优化方向: (1)将请求尽量拦截在系统上游(不要让锁冲突落到数据库上去).传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超 ...

  3. react初入门

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. artTemplate精彩文章(个人阅读过)

    轻量级artTemplate引擎 实现前后端分离—基础篇 :https://www.imooc.com/article/20263 轻量级artTemplate引擎 实现前后端分离—语法篇 : htt ...

  5. Azure系列2.1.5 —— BlobOutputStream

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...

  6. [转帖]迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比

    迎战AMD 7nm 64核EPYC 英特尔至强也玩起了胶水以及性价比 Intel 最强CPU 从最开始的双核 到现在的 28核 发展迅猛. https://www.cnbeta.com/article ...

  7. Day 6-1计算机网络基础&TCP/IP

    按照功能不同,人们将互联网协议分为osi七层或tcp/ip五层或tcp/ip四层(我们只需要掌握tcp/ip五层协议即可) 每层运行常见物理设备: TCP/IP协议: Transmission Con ...

  8. 【apache2】AH00543: httpd: bad user name apache

    当启动 apache 时,出现一下异常:AH00543: httpd: bad user name daemon 解决方法:            #groupadd daemon          ...

  9. 阿里云服务器晚上运行定时任务报Too many connections

    1. 相关查询连接数的命令 mysql>show variables like '%max_connections%'; +-------------------------+--------- ...

  10. 解决spring多线程不共享事务的问题

    在一个事务中使用多线程操作数据库时,若同时存在对数据库的读写操作,可能出现数据读取的不准确,因为多线程将不会共享同一个事务(也就是说子线程和主线程的事务不一样),为了解决这个问题,可以使用spring ...