[APIO2018] Circle selection 选圆圈】的更多相关文章

[LG4631][APIO2018]Circle selection 选圆圈 题面 洛谷 题解 用\(kdt\)乱搞剪枝. 维护每个圆在\(x.y\)轴的坐标范围 相当于维护一个矩形的坐标范围为\([x-r,x+r],[y-r,y+r]\) 可以减小搜索范围 然后再判断一下一个圆是否在当前搜索的矩形内,不在就剪枝 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring&g…
题面 自己去\(LOJ\)上找 Sol 直接排序然后\(KDTree\)查询 然后发现\(TLE\)了 然后把点旋转一下,就过了.. # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; typedef long long ll; IL int Input(){ RG int x = 0,…
Luogu 题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1, c_2,...,c_n\) .我们尝试对这些圆运行这个算法: \(1\).找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为\(c_i\). \(2\).删除\(c_i\)及与其有交集的所有圆.两个圆有交集当且仅当平面上存在一个点,这个点同时在这两个圆的圆周上或圆内.(原文直译:如果平面上存在一个点被这两个圆所包含,我们称这两个圆有交集.一个点被一个圆包含,当且仅当它位于圆内或圆周上.) \(3\).重复…
Description 给出 \(n\) 个圆 \((x_i,y_i,r_i)\) 每次重复以下步骤: 找出半径最大的圆,并删除与这个圆相交的圆 求出每一个圆是被哪个圆删除的 Solution \(kd-tree\) 搞一下 维护能够围住所有圆的最小矩形 然后模拟题意,枚举半径最大的圆 查询时就判断询问的圆是否与这个矩形有交,有交就递归下去 #include<bits/stdc++.h> #define sqr(x) ((x)*(x)) using namespace std; templat…
传送门 那个当前半径最大的圆可以用堆维护.这道题一个想法就是优化找和当前圆有交的圆的过程.考虑对于所有圆心建KD-tree,然后在树上遍历的找这样的点.只要某个点子树内的点构成的矩形区域到当前圆心的最近距离\(>2\)倍半径就不用找了 然而在loj上过不去,这时就可以用一个很鸡贼的优化,对于所有点绕原点旋转一定角度,然后就跑的过了(可能是全在一条直线上建KD-tree会出锅(雾)).稍微注意精度误差就行了 #include<algorithm> #include<iostream&…
qwq纪念AC450 一开始想这个题想复杂了. 首先,正解的做法是比较麻烦的. qwqq 那么就不如来一点暴力的东西,看到平面上点的距离的题,不难想到\(KD-Tree\) 我们用类似平面最近点对那个题一样的维护方式,对于一个子树内部,分别维护每一个维度的最大值和最小值,还有半径的最大值. 然后\(sort\)一遍,从半径大到小依次\(query\),每次\(query\)的时候,对于当前点,合法的条件是他和目标点的距离要小于等于两个圆的半径的和. 那么对于子树的估价函数,我们默认如果当前目标点…
https://www.zybuluo.com/ysner/note/1257597 题面 在平面上,有\(n\)个圆,记为\(c_1,c_2,...,c_n\).我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为\(c_i\). 删除\(c_i\)及与其相交的所有圆. 重复上面两个步骤直到所有的圆都被删除. 当\(c_i\)被删除时,若循环中第\(1\)步选择的圆是\(c_j\),我们说\(c_i\)被\(c_j\)删除.对于每个圆,求出它是被…
Description 给定平面上的 \(n\) 个圆,用三个参数 \((x, y, R)\) 表示圆心坐标和半径. 每次选取最大的一个尚未被删除的圆删除,并同时删除所有与其相切或相交的圆. 最后输出每个圆分别是被那个圆所删除的. Hint \(1\le n\le 3\times 10^5\) \(0\le |x|, |y|, R \le 10^9\) Solution 1 后来在 Codeforces 上找到的官方题解 Link here.如果对题解中某些说明无法理解可以参考上述内容.做法参考…
「APIO2018选圆圈」 题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1, c_2, \ldots, c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为 \(c_i\) . 删除 \(c_i\) 及与其有交集的所有圆.两个圆有交集当且仅当平面上存在一个点,这个点同时在这两个圆的圆周上或圆内. 重复上面两个步骤直到所有的圆都被删除. 当 \(c_i\) 被删除时,若循环中第1步选择的圆是 \(c_j\) ,我们说 \(c…
题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1,c_2,\ldots,c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为 \(c_i\) . 删除 \(c_i\) 及与其有交集的所有圆.两个圆有交集当且仅当平面上存在一个点,这个点同时在这两个圆的圆周上或圆内.(原文直译:如果平面上存在一个点被这两个圆所包含,我们称这两个圆有交集.一个点被一个圆包含,当且仅当它位于圆内或圆周上.) 重复上面两个步骤直到所有的圆都被删除.…
考虑乱搞,用矩形框圆放KD-Tree上,如果当前删除的圆和矩形有交就递归下去删.为防止被卡,将坐标系旋转一定角度即可.注意eps稍微设大一点,最好开上long double. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #…
题解 不旋转坐标系,TLE,旋转坐标系,最慢一个点0.5s--maya,出题人数据水平很高了-- 好吧,如果你不旋转坐标系,写一个正确性和复杂度未知的K - D树,没有优化,你可以得到87分的好成绩 但是你就是傻逼,你就是写不出来,能有什么办法,APIO Ag滚粗了呗= = 这道题看起来需要用什么东西维护一下平面,查找给定一个圆这个平面内多少个圆和它有交集,可以K - D树 我们考虑维护一个集合里的圆覆盖的矩形,就是最大的横纵坐标和最小的横纵坐标,查询的时候只要看看和当前圆横纵坐标是不是有交集,…
考前挣扎 KD树好题! 暴力模拟 通过kd树的结构把子树内的圈圈框起来 然后排个序根据圆心距 <= R1+R2来判断是否有交点 然后随便转个角度就可以保持优越的nlgn啦 卡精度差评 必须写eps差评 //Love and Freedom. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define db long double #define inf 2…
题目:https://loj.ac/problem/2586 只会 19 分的暴力. y 都相等,仍然按直径从大到小做.如果当前圆没有被删除,那么用线段树把 [ x-r , x+r ] 都打上它的标记. 看当前圆有没有被删除,只要看 x-r 和 x+r 两个位置上的标记就行了.因为被删除的话当前圆的直径更小,有相交的话, x-r 或 x+r 一定在对方内部.可以 x-r 和 x+r 分别在两个圆内部,看看哪个更大即可. #include<cstdio> #include<cstring&…
题目 有 \(n\) 个圆$c_1,c_2, \cdots , c_n $,执行如下的操作: 找到剩下的半径最大的圆删除并删除所有和它有交的其他并没有被删除的圆: 求每个圆是被那个圆删除的: $1 \le n \le 3 \times 10^5 $ ; 描述 kdt做法: 记录每个圆围成的举行作为剪枝,直接模拟删除: 记得旋转一下,然后eps开1e-3就好; 搬运一下$n  log^2n $做法(orz yww): 考虑找到和\(c_i\) 相交的半径最大的被自己删除的圆 ; 这样的圆一定满足互…
题意:给你n个圆,每次选择半径最大的,将它和与它相交的圆全部删去,输出每个圆是在哪次被删的. KD树模板题.用一个矩形框住这个圆,就可以直接剪枝了.为了防止被卡可以将点旋转一个角度,为了保险还可以多转几个角度. #include<cmath> #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef double db; using na…
传送门 Description 有\(n\)个圆,每次找到这些圆中半径最大中的编号最小的圆,删除ta及与其有交集的所有圆. 对于每个圆,求出它是被哪一个圆删除的. Solution  K-D Tree 每个点表示这个圆的外接矩形 排序后直接暴力搜索 相当于在搜索过程中进行了剪枝 复杂度玄学 要对全图坐标进行旋转 这题的\(eps\)不要开得太大,\(1e-3\)就行了,不然会莫名的Wa Code  #include<bits/stdc++.h> #define ll long long #de…
下面先给出比较简单的KD树的做法-- 根据圆心建一棵KD树,然后模拟题目的过程,考虑搜索一个圆 剪枝:如果当前圆[与包含该子树内所有圆的最小矩形]都不相交就退出 然而这样的理论复杂度是$o(n^2)$,所以会被出题人卡了 但是如果将坐标系旋转45度,即对于$(x,y)$,变为$((x-y)/\sqrt{2},(x+y)/\sqrt{2})$,就不会被卡了 然后因为可能相切,精度要求高,eps大约要取$10^{-3}$ 1 #include<bits/stdc++.h> 2 using name…
假设最大的圆半径为$R$,以$2R$为大小将地图划分为一个个格子,那么每个圆只需要检查圆心在附近$9$个格子内部的所有圆. 在当前圆的半径不足$\frac{R}{2}$时重构网格,那么最多重构$O(\log R)$次,且每个圆最多被检查常数次. 时间复杂度$O(n\log n\log R)$,利用Hash可以做到$O(n\log R)$. #include<cstdio> #include<algorithm> #include<vector> using namesp…
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<queue> #include<cmath> #define sqr(x) (x) * (x) #define M 300005 using namespace std; , alpha = acos(-) / , cosa = cos(alpha), sina = si…
题意 题目链接 Sol 下面是错误做法,正解请看这里 考虑直接用K-D tree模拟.. 刚开始想的是维护矩形最大最小值,以及子树中最大圆的位置,然后... 实际上最大圆的位置是不用维护的,直接把原序列排一遍序就可以了 再努力卡卡常就过了 如果还过不了的话可以尝试把所有点都转一个角度 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define chmin(x, y) (x = x < y ? x : y) #define chmax…
今年的APIO好邪啊. T1铁人两项 题目大意 给一个无向图,问有多少三元组(三个元素两两不同)使得它们构成一条简单路径 . 题解 无向图这种东西不好直接处理,考虑点双缩点建圆方树. 然后就出现了一个比较神的做法,把方点点权设为点双大小,圆点点权设为-1,那么我们枚举三元组中的起点和终点,那么这条路径的权值就是可能的中间点个数. 为什么?考虑两种圆点. 1.起点和终点,因为它们已经被当成三元组中的元素了,所以我们要在和它们相邻的点双中减掉它们,所以这个减一是对的. 2.其他圆点,这些圆点会被相邻…
HTML标签: 一.通用标签(一般标签) 1.格式控制标签 <font color="#6699aa" face="楷体" size="24">文字</font><b>加粗</b><i>倾斜</i><u>下划线</u><br/>换行 ** 空格 **<center>居中</center> * 2.内容标签 <h…
html标签详解   <!DOCTYPE> 标签 <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令. <!DOCTYPE html> <head>内的标签 标签 意义 <title></title> 定义网页标题 <style></st…
额..是这样的,去年为了学习web框架,自己开发了一个zbx配置管理的二次开发系统,当时从零开始接触web开发,也第一次接触到了前端的一些知识.其中最基础的就是html/css了.我把那部分笔记整理上来,但是肯定是非常粗浅的(本来写一本书都不为过的内容记录在一篇文章里),总之先记录下来了. html ■ HTML基本标签 <html></html> 整个文件的开始标签 <head></head> 关于html文件本身的一些信息,比如可以有子标签如下: tit…
一.HTML介绍 1.Web服务本质 当我们在浏览器中输入一个url后打开一个页面这个过程实质是一个网络编程中的sockt服务端接受指令并发送指令的一个过程.本质顺序是: 浏览器发请求——>HTTP协议——>服务端接受请求——>服务端返回响应——>服务端把HTML文件内容发给浏览器——>浏览器渲染页面 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5) w…
第一部分 认识HTML 一.认识HTML 1.HTML HTML:超文本标签语言Hyper Text Markup Language HTML:网页源代码. 浏览器:"解释和执行"HTML源码的工具. 2.HTML的结构组成: <!DOCTYPE html> //文档类型声明:声明当前文件是一个HTML5文件. 文档类型声明在一个html文件中必不可少!而且必须在网页的第一行! <html>   <head> <title>这是一个网页&…
一.HTML介绍 HTML全称是(Hypertext Markup Language, HTML)又称为超级文本标记语言,它主要his一种用于创建网页的标记语言,在本质上是浏览器可以识别的规则,我们按照规则编写网页内容,浏览器会按照规则来渲染我们编写的网页. 二.HTML文档结构解释 HTML的网页编写格式: HTML中head内常用标签 标签 意义 <title></title> 定义网页标题 <style></style> 定义内部样式表 <scr…
web服务实质 浏览器发送请求 -->HTTP协议-->服务端接收请求 --> 服务端返回响应 --> 服务端把HTML文件内容发给浏览器 --> 浏览器渲染页面 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5) while True: conn, addr = sk.accept() data = conn.recv(8096) conn.send(b…
Web服务本质 import socket def handle_request(client): request_data = client.recv(1024) print(request_data) client.send(b"HTTP/1.1 200 OK\r\n\r\n") # client.send(b"Hello, World") # client.send(b"<h1>Hello, World</h1>")…