「APIO2018」选圆圈】的更多相关文章

题目: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&…
题解 不旋转坐标系,TLE,旋转坐标系,最慢一个点0.5s--maya,出题人数据水平很高了-- 好吧,如果你不旋转坐标系,写一个正确性和复杂度未知的K - D树,没有优化,你可以得到87分的好成绩 但是你就是傻逼,你就是写不出来,能有什么办法,APIO Ag滚粗了呗= = 这道题看起来需要用什么东西维护一下平面,查找给定一个圆这个平面内多少个圆和它有交集,可以K - D树 我们考虑维护一个集合里的圆覆盖的矩形,就是最大的横纵坐标和最小的横纵坐标,查询的时候只要看看和当前圆横纵坐标是不是有交集,…
传送门 Description 有\(n\)个圆,每次找到这些圆中半径最大中的编号最小的圆,删除ta及与其有交集的所有圆. 对于每个圆,求出它是被哪一个圆删除的. Solution  K-D Tree 每个点表示这个圆的外接矩形 排序后直接暴力搜索 相当于在搜索过程中进行了剪枝 复杂度玄学 要对全图坐标进行旋转 这题的\(eps\)不要开得太大,\(1e-3\)就行了,不然会莫名的Wa Code  #include<bits/stdc++.h> #define ll long long #de…
#2585. 「APIO2018」新家 https://loj.ac/problem/2585 分析: 线段树+二分. 首先看怎样数颜色,正常的时候,离线扫一遍右端点,每次只记录最右边的点,然后查询左端点,这里不太行.这里只需要统计是否全出现过,pre[i]为这个颜色的上一个位置,那么这也就说明了pre[i]+1这段区间没出现过,所以要求[r+1,n]这段区间的最小的pre都要大于等于l.于是这就是线段树区间查询最小值了. 注意的是,每个点的pre有多个,每个叶子节点包含一个set,把所有的值插…
Portal Description 给出\(n,k,L,R(\leq10^9)\),求从\([L,R]\)中选出\(n\)个可相同有顺序的数使得其gcd为\(k\)的方案数. Solution 记\(f(x)\)表示gcd为\(x\)时的方案数,那么我们要求的就是\(f(k)\).设\(F(x)=\sum_{x|d}f(d)\)表示gcd为\(x\)的倍数时的方案数,即\(F(x)=(⌊\dfrac{R}{x}⌋-⌊\dfrac{L-1}{x}⌋)^n\).于是我们得到 \[\begin{al…
「CQOI2015」选数 题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研究.然而他很快发现工作量太大了,于是向你寻求帮助.你的任务很简单,小z会告诉你一个整数K,你需要回答他最大公约数刚好为K的选取方案有多少个.由于方案数较大,你只需要输出其除以1000000007的余数即可. 输入输出格式 输入格式: 输入一行,包含4个空格分开的正整数,…
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.如果对题解中某些说明无法理解可以参考上述内容.做法参考…
Description 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议.所以老师想请你帮他求出他该选多少学霸,才能既不让同学们抗议,又与原来的M尽可能接近 Input 第一行,三个正整数N,M,K. 第2…K行,每行2个数,表示一对实力相当的人的编号(编号为1…N) Output 一行,表示既不让同学们抗议,又与原来的M尽可能接近的选出学霸的数目.(如果有两种方案与M的差的绝对值相等,选较小的一种:) Sample Input…
题目描述 在平面上,有 \(n\) 个圆,记为 \(c_1,c_2,\ldots,c_n\) .我们尝试对这些圆运行这个算法: 找到这些圆中半径最大的.如果有多个半径最大的圆,选择编号最小的.记为 \(c_i\) . 删除 \(c_i\) 及与其有交集的所有圆.两个圆有交集当且仅当平面上存在一个点,这个点同时在这两个圆的圆周上或圆内.(原文直译:如果平面上存在一个点被这两个圆所包含,我们称这两个圆有交集.一个点被一个圆包含,当且仅当它位于圆内或圆周上.) 重复上面两个步骤直到所有的圆都被删除.…
是不是$ vector$存图非常慢啊...... 题意:求数对$(x,y,z)$的数量使得存在一条$x$到$z$的路径上经过$y$,要求$x,y,z$两两不同  LOJ #2587 $ Solution:$ 首先考虑一棵树的情况怎么做 我们枚举每一个点计算贡献,贡献即为经过这个点的链的数量 只要求出这个点的所有子树大小就可以算出这个贡献 然后发现如果某条链经过某个点双联通分量 这个连通分量里的所有点都会被这条链的端点对计算贡献 我们直接构建圆方树,令方点的权值为这个点双连通分量的大小 由于每个圆…