传送门

把圆拆成上下两个圆弧,因为不存在相交关系,圆弧直接的上下关系是不变的。

用set维护这些圆弧,插入的时候upper_bound一下,如果找到的是上圆弧,就是我外面的第一个圆,否则我外面的第一个圆就是这个下圆弧外面的第一个圆。

//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=400007;
typedef long long LL;
typedef double db;
using namespace std;
int n,cnt,f[N];
db x[N],y[N],r[N],now;template<typename T>void read(T &x)  {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
}struct node {int id,f;node(){}node(int id,int f):id(id),f(f){}friend bool operator <(const node&A,const node&B) {return x[A.id]+A.f*r[A.id]<x[B.id]+B.f*r[B.id];}
}q[N];struct bow {int id,f;bow(){}bow(int id,int f):id(id),f(f){}
};bool operator <(const bow&A,const bow&B) {db y1=(db)y[A.id]+(db)A.f*sqrt(r[A.id]*r[A.id]-(now-x[A.id])*(now-x[A.id]));db y2=(db)y[B.id]+(db)B.f*sqrt(r[B.id]*r[B.id]-(now-x[B.id])*(now-x[B.id]));return y1==y2?A.f<B.f:y1<y2;
}set<bow>s;
#define IT set<bow>::iterator//#define DEBUG
int main() {
#ifdef DEBUGfreopen("4561.in","r",stdin);freopen("4561.out","w",stdout);
#endifread(n);For(i,1,n) { read(x[i]); read(y[i]); read(r[i]); q[++cnt]=node(i,-1); q[++cnt]=node(i,1); }sort(q+1,q+cnt+1);For(i,1,cnt) {now=x[q[i].id]+q[i].f*r[q[i].id];if(q[i].f==-1) {IT it=s.upper_bound(bow(q[i].id,1));if(it!=s.end()) { bow tp=*it;if(tp.f==-1) f[q[i].id]=f[tp.id];else f[q[i].id]=-f[tp.id];}else f[q[i].id]=1;s.insert(bow(q[i].id,1)); s.insert(bow(q[i].id,-1));  }else s.erase(bow(q[i].id,1)),s.erase(bow(q[i].id,-1)) ;}db ans=0;For(i,1,n) ans+=r[i]*r[i]*f[i];printf("%lld\n",(LL)ans);return 0;
}
/*
5
-153 -765 50
-51 -765 50
0 867 50
0 969 50
0 969 47
*/

View Code

转载于:https://www.cnblogs.com/Achenchen/p/8657846.html

【BZOJ4561】[JLoi2016]圆的异或并相关推荐

  1. Bzoj4561 [JLoi2016]圆的异或并

    Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 521  Solved: 224 Description 在平面直角坐标系中给定N个圆.已知这些圆两两 ...

  2. bzoj 4561: [JLoi2016]圆的异或并(扫描线+set)

    4561: [JLoi2016]圆的异或并 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 715  Solved: 277 [Submit][Sta ...

  3. ybtoj洛谷P3268:圆的异或并(扫描线)

    解析 很神奇的一道题. 关键条件:任意两个圆无交. 把一个圆分成上下两个圆弧,那么所有圆弧的高度关系不会发生变化. 所以可以开一个 set,维护一个从左往右扫的扫描线,按照当前扫描线的横坐标定义比较符 ...

  4. 均值不等式链的几何证明

    均值不等式链的几何证明 这是我们高中时所见到的不等式链的关系,接下来将用几何图形的方法进行证明. 首先,做圆 A,直径 BC,在圆上异于 BC 取一点 D,连接 DA,DB,DC,并做 DE 垂直与 ...

  5. 为了防止别人非法使用计算机可以通过,[单选] 为了防止别人非法使用计算机,可以通过为计算机设置口令()。...

    [单选] 为了防止别人非法使用计算机,可以通过为计算机设置口令(). 更多相关问题 已知二面角α-l-β的大小为600,m.n为异面直线,且m⊥α,n⊥β,则m.n所成的角为()A.300B.600C ...

  6. Android多语言支持以及繁简转换

    Android多语言支持以及繁简转换 Android自身就带有多语言支持.前一段时间需要做一个同时支持繁简体的APP,经过简单的搜索和探索,轻松解决了问题.并且写了一个简单的繁体到简单的转换类.分享给 ...

  7. 信息论入门:信息守恒定律与纠错码

    Hamming编码研究 异或⊕的本质 其实"异或"这个名词的名字取得不好,叫"奇运算"都好听些. 以前我们学到异或和同或的时候讲到,异或指2个bit相异时值为1 ...

  8. 图像处理:什么是掩膜

    mask是用于部分或完全隐藏对象或元素的部分的图形操作. 将mask应用于图形对象的效果就好像将图形对象通过遮罩涂在背景上,从而完全或部分地遮盖了图形对象的各个部分,而遮罩内的图像不变化.在图像处理中 ...

  9. 图像处理中的mask(掩膜)

    文章目录: 一.什么是掩膜 二.掩膜的用法 三.掩膜运算的一个小实例 四.小结 在图像处理中,经常会碰到掩膜(Mask)这个词.那么这个词到底是什么意思呢?下面来简单解释一下. 一.什么是掩膜 首先我 ...

最新文章

  1. hdu2006 求奇数的乘积【C++】
  2. android 选座,机票在线选座 Android 开源库
  3. python pcm,python pcm音频添加头转成Wav格式文件的方法
  4. 作者:王绍卿, 男, 中国人民大学信息学院博士生, CCF学生会员。
  5. ubuntu启动脚本的一些笔记
  6. 三菱880彩铅和uni的区别_【彩铅基础】水溶性彩铅是什么?
  7. handler和thread之间如何传输数据_换机必备知识:如何将数据转移到Oppo手机上
  8. Oddz将于3月18日在Polkastarter进行IDO,此前已完成260万美元战略融资
  9. 解决办法:无法解析的外部符号 __imp_RegCloseKey
  10. VMware虚拟机专用win7系统下载|免费下载虚拟机专用的win7系统
  11. cad修改快捷键_CAD快捷键,提高绘图速度
  12. MYSQL中AS(取别名)
  13. 苹果要给高通多少钱?瑞银分析师预计最多支付60亿美元
  14. java并发-ReentrantReadWriteLock读写锁
  15. 体验godaddy域名转入,添加A记录,及使用dnspod的NS
  16. 我用这个画3d图和电路图、上网,防止鼠标手
  17. 逻辑回归原理梳理_以python为工具 【Python机器学习系列(九)】
  18. Python:素数求和
  19. 计算机类英文自我介绍,优秀的计算机专业英文自我介绍
  20. URL定义、格式、常见协议

热门文章

  1. 买二手房已经过户等待银行放款,应该没有变数了吧?
  2. 有一天我突然接到他的电话
  3. 电动车爬坡时究竟应该用最快档还是用最慢档?
  4. 全职宝妈做自媒体怎么样
  5. 为什么个体户做不大?
  6. P1 Human Pose Estimation人体姿态综述估计调研
  7. 字符串最后一个单词的长度
  8. 【云笔记搭建】Visual Code + Github仓库 + Git
  9. Socket超时时间设置
  10. MYSQL小函数大用途之-------FIND_IN_SET