对每个关键点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,几何的更多相关文章

  1. 关于Three.js基本几何形状之SphereGeometry球体学习

    一.有关球体SphereGeometry构造函数参数说明 <1>.SphereGeometry(radius, widthSegments, heightSegments, phiStar ...

  2. 几何服务,cut功能测试

    关于几何服务 几何服务用于辅助应用程序执行各种几何计算,如缓冲区.简化.面积和长度计算以及投影.在 ArcGIS Server 管理器中启动几何服务之后,您才能够在应用程序开发过程中使用该服务. 问题 ...

  3. 几何服务,cut功能,输入要素target(修改后)内容。

    几何服务,cut功能测试,输入要素target(修改后)内容. {"displayFieldName":"","fieldAliases": ...

  4. 几何服务,cut功能,输入要素target(修改前)内容。

    几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...

  5. 如何让你的UWP应用程序无缝调用几何作图

    有时候需要编辑一些几何图形,如三角形,圆锥曲线等,在UWP应用中加入这些几何作图功能是件费时间又很难做好的事.其实Windows 10 应用商店中已有一些专业的几何作图工具了,那么能借来一用吗?答案是 ...

  6. poj 2031Building a Space Station(几何判断+Kruskal最小生成树)

    /* 最小生成树 + 几何判断 Kruskal 球心之间的距离 - 两个球的半径 < 0 则说明是覆盖的!此时的距离按照0计算 */ #include<iostream> #incl ...

  7. NOIP2002矩形覆盖[几何DFS]

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  8. DOM 元素节点几何量与滚动几何量

    当在 Web 浏览器中查看 HTML 文档时,DOM 节点被解析,并被渲染成盒模型(如下图),有时我们需要知道一些信息,比如盒模型的大小,盒模型在浏览器中的位置等等,本文我们就来详细了解下元素节点的几 ...

  9. Get it,你离几何达人不远了!

    对于爱学几何的人,是否存在这样的困扰:没有标准的尺规工具,图形画的不标准,理解上总是出错......整天在纸上画图,浪费大把大把的时间......几何图形画的不美观,在别人面前都拿不出手,公开课上都没 ...

随机推荐

  1. 1010. Radix (25)(出错较多待改进)

    Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...

  2. [luoguP2216] [HAOI2007]理想的正方形(二维单调队列)

    传送门 1.先弄个单调队列求出每一行的区间为n的最大值最小值. 2.然后再搞个单调队列求1所求出的结果的区间为n的最大值最小值 3.最后扫一遍就行 懒得画图,自己体会吧. ——代码 #include ...

  3. vue2.0 类淘宝不同屏幕适配及px与rem转换问题

    因为项目需要,vue开发项目,必须将已写的以px为单位的部分,转换为rem.要是全部转换,这大量的计算量,哪怕是sublime Text 的cssrem插件,也是一个庞大的工作量.所以,直接使用插件没 ...

  4. xth 砍树(codevs 1369)

    题目描述 Description 在一个凉爽的夏夜,xth 和 rabbit 来到花园里砍树.为啥米要砍树呢?是这样滴,小菜儿的儿子窄森要出生了.Xth这个做伯伯的自然要做点什么.于是他决定带着rab ...

  5. CodeForces - 750D New Year and Fireworks

    因为 烟花的最大范围是各个方向150格 所以 最大的空间应该是 300*300 BFS和DFS均可 模拟每一个烟花爆炸的过程 但是要注意 需要一个数组来排重 在某一个爆炸点 如果爆炸的方向 和爆炸的层 ...

  6. 【收藏】SSH原理与运用

    http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruanyifeng.com/blog/2011/12/ ...

  7. hihoCoder #1032 : 最长回文子串 [ Manacher算法--O(n)回文子串算法 ]

    传送门 #1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相 ...

  8. linux signal 列表

    Linux 信号表   Linux支持POSIX标准信号和实时信号.下面给出Linux Signal的简表,详细细节可以查看man 7 signal. 默认动作的含义如下: Term    终止进程 ...

  9. 跟着9张思维导图学JavaScript

    思维导图小tips 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...

  10. Windows 8.1更新变化

     在上个月微软公布了Windows 8.1更新(KB2919355),假设大家使用的是Windows 8.1的系统,而且启用了自己主动更新,那这个更新就会被自己主动安装.伴随着这个更新,微软同一时 ...