2020-7-13 12:00~17:00
145/1159
4/8/11
给了n个点,画一个过原点的圆,问最多能有多少个点在圆上。
我们固定原点和一个点,枚举剩下的点,求出这三个点的圆心,答案即为重合最多的圆心数加一。题目有点卡常,用分数计算会超时,无奈只能用double记录点玄学通过。
用尽量少的路径覆盖一棵树的所有边
solved by hxm
路径显然最优时从一个叶子出发,到另一个叶子结束。记叶子节点个数为$m$,那么答案应该就是$\lceil \frac{m}{2} \rceil$
问题是如何找到一组解
选一个点作为根节点,如果能将不同子树里的叶子匹配,就能做到完全覆盖。那么只需要每次选剩余叶子最多的两个子树匹配。
容易发现,这样操作,只需要最大的子树里叶子节点个数不超过总个数的一半。
只需要随意选一个点,如果不满足条件,就往那个叶子最多的子树走,最后一定能走到一个合法的点。
solved by hxm 水题
给了 $n$ 个数,让你求 $1 \le i \le n$ ,选 $i$ 个数(可以选相同的数)异或和的最大值。
发现 $i$ 在19之后答案和 $i-2$ 一致,原理参考线性基。所以我们只需求前19个的答案,用FWT即可完成。
一个$n \times m$的网格,每个格子$(x,y)$里写着$lcm(x,y)$。
现在用一个$k \times k$的框去选中一些格子,得到其中最大值。
求所有选取方法最大值的总和。
solved by hxm
暴力$O(nmlogn)$求出$lcm$,然后竖着用$m$个单调队列维护最大值,然后再用一个单调队列维护单调队列的最大值,即可求出当前区域的最大值。
一个multiset,支持如下操作:
补题 by fyh
询问即问是否存在两个数$a,b$,使得$|a-b|<x<a+b$。这个很明显是一个区间覆盖问题,但是因为集合中两两组成的区间是$n^2$级别的,考虑减少区间:$a>b>c$,其中$(a,b)$与$(a,c)$组成的开区间分别是$(a-b,a+b),(a-c,a+c)$。后者是完全被前者包含的,所以对于每一个数,只需要找他的前驱,用线段树维护一下这$n$个区间的并即可。
一个排列初始时是$1,2,\ldots,n$,存在某种置换$p$,使得排列在置换$k$次后的排列为$A_1,\ldots,A_n$。求置换$p$。
solved by fyh
本题的一大特性是$k$是质数,也就是$k$模任何数都非0。
置换其实就是若干个循环。每个循环都是独立的,现考虑某个长度为$size$的环,置换$k$次的结果是等效于置换为$k\%size$的结果。设$k\%size=m$,则我们当前得到的环其实是走$m$步的结果,我们要得到走1步的结果,便可以考虑在这个环上每步都好几倍,最后等效为走一步,即解$m*k\%size=1$的模方程的$x$。至此,我们成功构造出了原置换。
对一个区间$[l,r]$可进行两种操作:
1、将$[l,r]$变为$[l-1,r]$或$[l+1,r]$
2、将$[l,r]$变为$[l,r-1]$或$[l,r+1]$
现在有$m$个限制,限制区间$[l_i,r_i]$不能进行操作$c$($c=L$或$c=R$),但是开启这个限制需要$w_i$的费用
问最少的费用花费,使得区间$[1,n]$不能转移到任意一个区间$[l,r]$使$l=r$
补题 solved by hxm
将每个区间看做二维平面上的点,我们的目标就是阻止从$(1,n)$走到任意一个$(x,x)$
显然相邻的点可以连边,我们把$(1,n)$看做源点的话,新建一个汇点将所有$(x,x)$连向汇点,那么这就是一个最小割问题
但是会T。
发现这是一个平面图,转化为对偶图的最短路即可
开场 发现D很简单
12:08 hxm 过D wxg想出B题做法 fyh开写B
12:08~12:50 fyh狂waB wxg hxm想出C hxm开写C
13:33 hxm过C 在想B的错误和F,尝试用分数处理精度问题 改为wxg写B
13:33~14:30 B卡常 又wa又T hxm想出F 开写
15:04 hxm过F wxg继续尝试B,放弃 ,wxg开想G
15:04~16:00 ??
16:00 看J题过得人多 fyh想J
16:36 fyh 过J wxg写G,未知原因段错误,结束。
因为很少人过,没有读I
K题因为过的人少没有深想
H没有仔细想
B陷入无解,纠结太久
总结:计算几何最后再写 对榜的利用价值??