BZOJ4814,几何
对每个关键点i,将每个三角形缩成一个线段(因为三角形不相交),然后把线段两端点 和其他关键点一起 以i为中心点 极角排序。
扫一圈。扫到一个关键点j时, 判断当前最靠近i的线段是否遮盖i到j的路径, 因为对同一个点i,线段之间的相对关系是不变的,所以可以用堆维护加线段删线段,
#include <bits/stdc++.h>
#define LL long long
using namespace std;
int T,n,m,p,q,k,t,x,y,z,ans,d[],e[];
struct node{int x,y,d;}a[],b[],c[][];
LL operator *(node a,node b){return (LL)a.x*b.y-(LL)a.y*b.x;}
node operator -(node a,node b){return (node){a.x-b.x,a.y-b.y,a.d};}
bool hi(int u,int v){ // v是不是比u更接近中心点
LL x=(c[v][]-c[u][])*(c[u][]-c[u][]),y=(c[v][]-c[u][])*(c[u][]-c[u][]);
if (x>=&&y>=) return ; if (x<=&&y<=) return ;
return (c[u][]-c[v][])*(c[v][]-c[v][])>=&&(c[u][]-c[v][])*(c[v][]-c[v][])>=;
}
bool cmp(node u,node v){ LL x=(u-a[])*(v-a[]); if (!x) return u.d>v.d; else return x>;}
void join(int x){
int i=++T;
while (i>&&hi(d[i>>],x)) e[d[i]=d[i>>]]=i,i>>=;
d[i]=x; e[x]=i;
}
void del(int x){
if (e[x]==T) {e[x]=d[T--]=; return;}
int i=e[x]; e[x]=; x=d[i]=d[T]; d[T--]=;
while (i>&&hi(d[i>>],x)) e[d[i]=d[i>>]]=i,i>>=;
while (i<<<=T&&hi(x,d[i<<])||i<<<T&&hi(x,d[i<<^]))
i<<==T||hi(d[i<<^],d[i<<])?
(e[d[i]=d[i<<]]=i,i<<=):(e[d[i]=d[i<<^]]=i,i=i<<^);
d[i]=x; e[x]=i;
}
int main(){
scanf("%d%d",&n,&m); if (n==) {puts(""); return ;}
for (t=;t<=n;++t) scanf("%d%d",&a[t].x,&a[t].y);
for (int i=;i<=m;++i)
for (int j=;j<;++j)
a[++t].d=i,scanf("%d%d",&a[t].x,&a[t].y),c[i][j]=a[t];
t=n+m+m;
for (int i=;i<=n;++i){
while (T) e[d[T]]=,d[T--]=;
swap(a[i],a[]); p=; q=t+; b[]=a[];
for (int j=;j<=n;++j) a[j].x<a[].x?b[++p]=a[j]:b[--q]=a[j];
for (int j=;j<=m;++j){
sort(c[j],c[j]+,cmp);
c[j][].x<a[].x?b[++p]=c[j][]:b[--q]=c[j][];
c[j][].x<a[].x?(b[++p]=c[j][],b[p].d*=-):(b[--q]=c[j][],b[q].d*=-);
}
if (<=p) sort(b+,b+p+,cmp);
if (p<t)sort(b+p+,b+t+,cmp);
for (int j=;j<=m;++j)
if ((c[j][]-a[])*(b[]-a[])>&&(c[j][]-a[])*(b[]-a[])<=) join(j);
for (int j=;j<=t;++j)
if (!b[j].d){
if (!T||(c[d[]][]-c[d[]][])*(b[j]-c[d[]][])>) ++ans;
}else
if (b[j].d>) join(b[j].d); else del(-b[j].d);
}
printf("%d",ans>>);
return ;
}
秋姉妹のなく頃に
n^2*log*计算几何自带大常数。。。然而跑的还算挺快的
BZOJ4814,几何的更多相关文章
- 关于Three.js基本几何形状之SphereGeometry球体学习
一.有关球体SphereGeometry构造函数参数说明 <1>.SphereGeometry(radius, widthSegments, heightSegments, phiStar ...
- 几何服务,cut功能测试
关于几何服务 几何服务用于辅助应用程序执行各种几何计算,如缓冲区.简化.面积和长度计算以及投影.在 ArcGIS Server 管理器中启动几何服务之后,您才能够在应用程序开发过程中使用该服务. 问题 ...
- 几何服务,cut功能,输入要素target(修改后)内容。
几何服务,cut功能测试,输入要素target(修改后)内容. {"displayFieldName":"","fieldAliases": ...
- 几何服务,cut功能,输入要素target(修改前)内容。
几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...
- 如何让你的UWP应用程序无缝调用几何作图
有时候需要编辑一些几何图形,如三角形,圆锥曲线等,在UWP应用中加入这些几何作图功能是件费时间又很难做好的事.其实Windows 10 应用商店中已有一些专业的几何作图工具了,那么能借来一用吗?答案是 ...
- poj 2031Building a Space Station(几何判断+Kruskal最小生成树)
/* 最小生成树 + 几何判断 Kruskal 球心之间的距离 - 两个球的半径 < 0 则说明是覆盖的!此时的距离按照0计算 */ #include<iostream> #incl ...
- NOIP2002矩形覆盖[几何DFS]
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- DOM 元素节点几何量与滚动几何量
当在 Web 浏览器中查看 HTML 文档时,DOM 节点被解析,并被渲染成盒模型(如下图),有时我们需要知道一些信息,比如盒模型的大小,盒模型在浏览器中的位置等等,本文我们就来详细了解下元素节点的几 ...
- Get it,你离几何达人不远了!
对于爱学几何的人,是否存在这样的困扰:没有标准的尺规工具,图形画的不标准,理解上总是出错......整天在纸上画图,浪费大把大把的时间......几何图形画的不美观,在别人面前都拿不出手,公开课上都没 ...
随机推荐
- hihocoder 1425What a Beautiful Lake(实验专用)
Problem D. What a Beautiful Lake Description Weiming Lake, also named "Un-named Lake", is ...
- idea web项目启动失败的情况---webapp文件夹路径不对,应如图位置
- Cloud BOS平台-自定义用户联系对象
适用业务场景:新增用户时,联系对象类型默认为:职员.客户.供应商.客户需要增加一类"承运商",类型选择"承运商"时,联系对象只显示相应的承运商."承运 ...
- 前端的指导方针---css篇
英语是渣渣,想学英语,又不想花钱报培训班.看不懂的文章,还是翻译一下留着自己看吧. 引自 : https://github.com/bendc/frontend-guidelines HTML ...
- MySQL的字符串连接函数CONCAT, CONCAT_WS,GROUP_CONTACT
本文转载自de.cel<MySQL的字符串连接函数CONCAT, CONCAT_WS,GROUP_CONCAT> 在搜索Mysql中怎么实现把一列的多行数据合并成一行时,找到了grou ...
- The Doors--poj1556(最短路+判断点与线段的关系)
http://poj.org/problem?id=1556 题目大意:从(0,5)走到(10,5)走的最短距离是多少 中间有最多18个隔着的墙 每个墙都有两个门 你只能从门通过 我的思路是 只 ...
- Docker安装redis操作命令
最近学习了redis,那么今天我们来学习以下在Docker上安装我们的redis,并查看有关redis的一系列命令 查找redis docker search redis 拉取redis docker ...
- Windows如何在cmd命令行中查看、修改、删除与添加、设置环境变量
首先明确一点: 所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改.也就是说当关闭此cmd命令行窗口后,将不再起作用.永久性修改环境变量的方法有两种:一种是直接修改注册表(此种方 ...
- hp 88a加粉
http://v.youku.com/v_show/id_XNzEzODEwNzMy.html
- linux定时重启节约内存
linux服务器上运行的一些程序,比较消耗内存,需要定时重启,进行内存定期释放 0 2 * * * sudo /sbin/reboot && echo $(date) '重启成功' ...