题面 自己去\(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,…
[LG4631][APIO2018]Circle selection 选圆圈 题面 洛谷 题解 用\(kdt\)乱搞剪枝. 维护每个圆在\(x.y\)轴的坐标范围 相当于维护一个矩形的坐标范围为\([x-r,x+r],[y-r,y+r]\) 可以减小搜索范围 然后再判断一下一个圆是否在当前搜索的矩形内,不在就剪枝 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring&g…
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\) 及与其有交集的所有圆.两个圆有交集当且仅当平面上存在一个点,这个点同时在这两个圆的圆周上或圆内.(原文直译:如果平面上存在一个点被这两个圆所包含,我们称这两个圆有交集.一个点被一个圆包含,当且仅当它位于圆内或圆周上.) 重复上面两个步骤直到所有的圆都被删除.…
题解 不旋转坐标系,TLE,旋转坐标系,最慢一个点0.5s--maya,出题人数据水平很高了-- 好吧,如果你不旋转坐标系,写一个正确性和复杂度未知的K - D树,没有优化,你可以得到87分的好成绩 但是你就是傻逼,你就是写不出来,能有什么办法,APIO Ag滚粗了呗= = 这道题看起来需要用什么东西维护一下平面,查找给定一个圆这个平面内多少个圆和它有交集,可以K - D树 我们考虑维护一个集合里的圆覆盖的矩形,就是最大的横纵坐标和最小的横纵坐标,查询的时候只要看看和当前圆横纵坐标是不是有交集,…
考虑乱搞,用矩形框圆放KD-Tree上,如果当前删除的圆和矩形有交就递归下去删.为防止被卡,将坐标系旋转一定角度即可.注意eps稍微设大一点,最好开上long double. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #…
考前挣扎 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…
题目链接:https://www.luogu.org/problemnew/show/P4113 为什么要卡莫队!为什么加强的这么毒瘤! 莫队可以拿100分剩下三个点没治了 // luogu-judger-enable-o2 #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ri regist…
题目链接:https://www.luogu.org/problemnew/show/P2065 辣鸡匈牙利,没有优化贼鸡儿慢 // luogu-judger-enable-o2 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define ri register #define fo(a,b) for(ri int a = 1; a <= b…
今年的APIO好邪啊. T1铁人两项 题目大意 给一个无向图,问有多少三元组(三个元素两两不同)使得它们构成一条简单路径 . 题解 无向图这种东西不好直接处理,考虑点双缩点建圆方树. 然后就出现了一个比较神的做法,把方点点权设为点双大小,圆点点权设为-1,那么我们枚举三元组中的起点和终点,那么这条路径的权值就是可能的中间点个数. 为什么?考虑两种圆点. 1.起点和终点,因为它们已经被当成三元组中的元素了,所以我们要在和它们相邻的点双中减掉它们,所以这个减一是对的. 2.其他圆点,这些圆点会被相邻…
checkbutton控件 简单的实现多选: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("300x200+10+20") # 创建四个多选框 cb1 = tkinter.Checkbutton(wuya,text='周杰伦') cb1.pack() cb2 = tkinter.Checkbutton(wuya,text='周星驰') cb2.pack() cb3 = tki…
目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #102. 最小费用流 #103. 子串查找 #104. 普通平衡树 #108. 多项式乘法 #119. 非负权单源最短路 #130. 树状数组 1 :单点修改,区间查询 #139. 树链剖分 #161. 乘法逆元 2 #556. 「Antileaf's Round」咱们去烧菜吧 #2030. 「SDOI…
话说SCOI都考了1个月了,终于拿出决心把题解补完了,但都说了是极水的题解,大家就看着玩吧- - DAY1 T1:目标是找最长不降子序列,先就有一个比较显然的结论,就是假如我们要拔高区间[L, R], 将其换为[L, N]肯定不会让答案变差(YY一下就发现这点很显然),就可以得到一个DP的大体思路了. 就是DP[i][j]表示以i结尾并i共计被拔高了j次的最长子序列的长度,然后发现dp[i][j]由dp[p][q]转移过来当且仅当 height[i] + j >= height[p] + q且j…
以下选自官方题解: 考虑困难的需求数量,我们将覆盖这些困难, 然后我们将提出新的问题,并准备新的问题来覆盖其他需求. 很明显,如果我们决定满足从n中抽取i的要求,那么最好采用那些复杂性最小的要求. 让我们把最难的问题简化成最简单的要求. 如果一切顺利,我们用n-i更新答案. 时间复杂度为O(n^2),空间复杂度为O(n). 有一个复杂度为O(n+m)的解,希望读者认真探究. 代码: #include <bits/stdc++.h>//万能头文件 using namespace std;//使用…
HTML知识 HTML介绍 Web服务本质 浏览器发请求 --> HTTP协议 --> 服务端接收请求 --> 服务端返回响应 --> 服务端把HTML文件内容发给浏览器 --> 浏览器渲染页面 HTML是什么? 超文本标记语言(Hypertext Markup Language, HTML)是一种用于创建网页的标记语言. 本质上是浏览器可识别的规则,我们按照规则写网页,浏览器根据规则渲染我们的网页.对于不同的浏览器,对同一个标签可能会有不同的解释.(兼容性问题) 网页文件的…
[前端.HTTP协议.HTML标签] 什么是前端 """ 任何与用户直接打交道的操作界面都可以称之为前端 比如:电脑界面 手机界面 平板界面 什么是后端 后端类似于幕后操作者(一堆让人头皮发麻的代码) 不直接跟用户打交道 """ 为什么学前端 """ 因为我们是全栈开发工程师 但是前端这一块我们不会学的很详细 只要求做到能够看得懂基本的前端代码以及能够搭建一些简单的页面即可 先打下前端的基础 为后续可能需要扩展做准备…