首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
BZOJ2961】共点圆
2024-08-28
BZOJ2961: 共点圆
好久没发了 CDQ分治,具体做法见XHR的论文… /************************************************************** Problem: 2961 User: zhuohan123 Language: C++ Result: Accepted Time:5060 ms Memory:41704 kb ****************************************************************/ #inc
BZOJ2961 共点圆[CDQ分治]
题面 bzoj 其实就是推一下圆的式子 长成这个样子 假设要查询的点是(x, y) 某个圆心是(p, q) \((x - p)^2 + (y - q)^2 \leq p^2 + q^2\) 变成 \(-\frac{2x}{2y}p + \frac{x^2+y^2}{2y} \leq q\) 那么一个点合法就要对所有圆心都满足上面这个式子 很明显拿斜率截就好啦 然后cdq维护上下凸包 附:cdq维护凸包过程 void cdq(int L, int R){ if(L == R) return ; i
bzoj2961 共点圆 bzoj 4140
题解: 比较水的一道题 首先我们化简一下式子发现是维护xxo+yyo的最值 显然是用凸包来做 我们可以直接用支持插入删除的凸包 也是nlogn的 因为没有强制在线,我们也可以cdq,考虑前面一半对答案的影响,再考虑后面的 时间复杂度nlog^2n 后面这道强制在线当然可以直接平衡树维护 但是有一种神奇的方法叫做二进制分组 也是比较好理解的 就是在不断重构 时间复杂度 nlog^3n 注意一下,运用cdq分治和二进制分组的前提是 修改操作互不影响 代码:
bzoj2961 共点圆 (CDQ分治, 凸包)
/* 可以发现可行的圆心相对于我们要查询的点是在一个半平面上, 然后我们要做的就是动态维护凸壳然后用这个半平面去切它 看看是否是在合法的那一面 然后cdq分治就可以了 代码基本是抄的, */ #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<iostream> #include<cmath> #define ll long l
BZOJ2961: 共点圆(CDQ分治+凸包)
题面 传送门 题解 这题解法真是多啊--据说可以圆反演转化为动态插入半平面并判断给定点是否在半平面交中,或者化一下改成给定点判断是否所有点都在某一个半平面内-- 鉴于圆反演我也不会,这里讲一下直接推的好了 如果一个圆的圆心是\((a,b)\),询问点是\((x,y)\),那么这个询问点在圆心上的条件就是 \[ \begin{aligned} (x-a)^2+(y-b)^2\le a^2+b^2 \\ x^2+y^2\le 2ax+2by \\ b\ge -\frac{x}{y}a+\frac{x
[BZOJ2961]共点圆-[凸包+cdq分治]
Description 传送门 Solution 考虑对于每一个点: 设圆的坐标为(x,y),点的坐标为(x0,y0).依题意得,当一个点在圆里,需要满足(x-x0)2+(y-y0)2<=x2+y2. 化简得x02+y02<=2x0*x+2y0*y. 当y0>0,x*(-x0/y0)+0.5y0+x02/(2*y0)<=y,这是一个半平面的式子:当y0<0时同理,但是要变号. 所以对于某个点(x0,y0),我们构造出在它前面所有圆心的凸包.凸包应分为上下. 通过以上式子我们可
[BZOJ2961] 共点圆 [cdq分治+凸包]
题面 BZOJ传送门 思路 首先考虑一个点$(x_0,y_0)$什么时候在一个圆$(x_1,y_1,\sqrt{x_1^2+y_1^2})$内 显然有:$x_1^2+y_1^2\geq (x_0-x_1)^2+(y_0-y_1)^2$ 化简:$2x_0x_1+2y_0y_1\geq x_0^2+y_0^2$ 所有含$x_1,y_1$的项挪到同一边,除掉一个$2y_0$(假设它是正的),得到: $y_1\geq -\frac{x_0}{y_0}x_1+\frac{x_0^2+y_0^2}{2y_0
【BZOJ2961】共点圆(CDQ分治)
[BZOJ2961]共点圆(CDQ分治) 题面 BZOJ 题解 设询问点\((x,y)\),圆心是\((X,Y)\) 那么如果点在园内的话就需要满足 \((X-x)^2+(Y-y)^2\le X^2+Y^2\) 拆开之后就变成了 \(x^2+y^2-2xX\le 2yY\) 除过去就是\(-\frac{x}{y}X+\frac{x^2+y^2}{2y}\le Y\) 显然左边是一个直线,那么,这个式子的含义就是, 对于任意\((X,Y)\),在\(X\)处的函数值都要小于\(Y\), 即这个直线
【BZOJ4140】共点圆加强版(二进制分组)
[BZOJ4140]共点圆加强版(二进制分组) 题面 BZOJ 题解 我卡精度卡了一天.... 之前不强制在线的做法是\(CDQ\)分治,维护一个凸壳就好了. 现在改成二进制分组,每次重建凸壳就好了.. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include&
【bzoj2961】 共点圆
http://www.lydsy.com/JudgeOnline/problem.php?id=2961 (题目链接) 题意 按照一定的顺序给出一些圆和一些点,对于每一个点问是否在所有圆内. Solution 我算是明白计算几何题是有多蛋疼了. 圆包含点$(x_0,y_0)$的条件:$$x*x+y*y>=(x-x_0)*(x-x_0)+(y-y_0)*(y-y_0)$$ $$-2x_0+x_0^2+y_0^2<=2y_0y$$ 题目只说圆心的纵坐标大于$0$,气的我吐出一口老血.所以根据$y_
热门专题
android Paint设置的字体大小自适应
mysql 指定binlog文件存放位置
mongo not()反操作
andriod 手机验证码注册
linux_eabi_syscall 的作用
echarts中y轴字体颜色怎么修改
mssql 如何循环表中每一条记录
server2008r2邮件服务器
ansible include 结构
zabbix报警太频繁了
java svg 验证码
如果源文件中只能有一个类那么这个类必须是主类
cocos creator vscode代码提示
ubuntu 命令打开Edit Connections
jdbc 链接 oracle 失败
ubuntu安装elasticsearch
jsp OPTIONS 请求
ajaxFileUpload 同一页面多个上传
vue判断点击了第几行元素
数据库新建登录名可以干什么