首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
BZOJ2961】共点圆
2024-10-30
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_
热门专题
创建一个dos类型的表空间可以使用以下哪两种文件系统作为
python 去除空list
wpf页面布局怎么自适应
PHP数据插入列队的用处
centos 7.9 显示 7.4
cocos creator 怎么动态隐藏componse
c3p0config.xml下载
vba计算行数和列数
js 让页面不能点击
Ubuntu20.04同个网口添加多个地址
office安装程序在哪里找
VScode的wordcloud
CATIA 许可证过期怎样替换
在kibana中查询日志
Photoshop32位 网盘下载
vue 如何获取上页传递的数组
mobaxterm连接mysql
ulimit提高并发
qt model存储到本地
https: bssq01.cc