2020 集训队作业 - 第二部分
做sb题已经快要做傻了……但是就连sb题我也要调很久……
标有“口胡”字样的不保证正确性,有可能没有看过题解
已经凑够 135 道题了,不出意外的话被咕掉的题就是永久咕了。
A (WF 2014) : A B C E F G H I J K L
B (WF 2015) : B E G H J K L M
C (WF 2016) : A B D F H I J K M
D (WF 2017) : A B D G H J K L
E (WF 2018) : C D E G H I J
F (WF 2019) : B C F G I J K
G (NEERC 2017) : F G H I J K L
H (NEERC 2016) : B C D G I K L M
I (NEERC 2015) : B C D H I J K L
J (NEERC 2014) : C D E G H I
K (NEERC 2013) : A C D E G H I K
L (CERC 2017) : B C D E I K L
M (CERC 2016) : B D E G I J L
N (CERC 2015) : C E F G I J L
O (CERC 2014) : A B E G J K L
P (CERC 2013) : A D E G H J
Q (NEERC,NSub 2017) : C D E F G H J
R (NEERC,NSub 2016) : B D E G H I J
S (NEERC,NSub 2015) : D F G I K
T (NEERC,NSub 2014) : C E F H K
U (NEERC,NSub 2013) : C H I J L——抄自兔队
试题一 | 完成情况 | 试题二 | 完成情况 | 试题三 | 完成情况 |
---|---|---|---|---|---|
LC | 独立完成 | CD | 独立完成 | JI | 参考题解 |
DL | 独立完成 | ME | 独立完成 | PE | 参考题解 |
LI | 独立完成 | AI | 参考题解 | RJ | 独立完成 |
SF | 独立完成 | II | 跳过 | HG | 独立完成 |
RE | 独立完成 | LL | 独立完成 | OA | 独立完成 |
FB | 参考题解 | QD | 参考题解 | DA | 计算几何 |
TC | 独立完成 | AE | 独立完成 | CB | 独立完成 |
GF | 独立完成 | AG | 独立完成 | JC | 口胡 |
PA | 独立完成 | TH | 独立完成 | EH | 参考题解 |
AJ | 计算几何&不会 | TK | 独立完成 | EI | 独立完成 |
UL | 独立完成 | AF | 独立完成 | SK | 参考题解 |
BH | 独立完成 | RD | 独立完成 | OK | 独立完成 |
FC | 跳过 | JD | 计算几何 | OE | 独立完成 |
TF | 独立完成 | FF | 参考题解&缺代码 | DD | 独立完成 |
CJ | 参考题解&缺代码 | HK | 参考题解 | MJ | 独立完成 |
FG | 独立完成 | GL | 独立完成 | AL | 参考题解 |
FI | 跳过 | IC | 独立完成 | QC | 独立完成 |
MD | 独立完成 | OJ | 独立完成 | HI | 独立完成 |
KK | 独立完成 | JH | 独立完成 | OB | 独立完成 |
BK | 参考题解 | GJ | 独立完成 | KE | 参考题解&缺代码 |
CA | 独立完成 | IK | 独立完成 | LE | 独立完成 |
RI | 独立完成 | LK | 独立完成 | PD | 独立完成 |
JE | 独立完成 | LB | 独立完成 | HB | 参考题解 |
BL | 独立完成 | RG | 独立完成 | AH | 独立完成 |
AK | 独立完成 | GG | 独立完成 | JG | 独立完成 |
别问,问就是抄兔队的
LC
大致的 dfs 顺序是 左-右-中 ,但是要特判根为 左-中-右 。
由于左右长得几乎一样,所以考虑根号分治:对于深度小于 15 的树,直接存下它的所有信息(关于根的一个函数);然后无脑递归下去,只会递归 15 层。复杂度 \(O(q2^{K/2})\) 。
CD
怎么作业里什么垃圾模拟题都有
时间就那么几种,所以枚举所有的时间,然后判断每个位置是否有该亮的不亮/不该亮的亮,以及是否 0/1 都出现过。如果前两种在一个位置同时出现,或是 0/1 都出现但有错,那么一定不是这个时间。
然后对于每个位置,先看是否 0/1 都出现 (W
) ,再看是否全都有错 (0
/1
) ,最后只能是 ?
。
写死我了……提交记录
JI
但凡手玩几个排列也不至于做不出来……
显然问题等价于留下最多合法的,而被删掉的一定可以找到位置。考虑一个排列什么时候合法,那么从 1 开始往 2 所在的位置跳,再往 3 跳,每次都要处在原来的一个区间内。
那么我们写出一个合法排列看看:1259ACB87643
,发现是从最大值往两边递减。必要性和充分性都很容易证明,就做完了。提交记录
DL
先考虑最靠左的右括号,取最上面那个。它一定会匹配到能匹配的最靠下的(如果有多个就一定无解)。所以可以从左往右扫描线,维护每个纵坐标是否有左括号,加入右括号时线段树二分。最后再一次扫描线判断方案是否合法。提交记录
(脑子不太好使,写个线段树二分都能把复杂度写假……)
ME
观察样例可以得到一组解:\(a=1,b=k,c=k(k+1)\) 。
设 \(a<b<c\) ,打表可以获得思路:固定 \(b,c\) ,令 \(a'=a+x\) ,那么有方程 \(x^2+2ax=k(b+c)x\) ,得到 \(x=k(b+c)-2a\) ,即 \(a'=k(b+c)-a\) 。
然而这样需要迭代三次才能获得三个不同的数,根本无法在 \(10^{100}\) 内凑够 \(n\) 个 。
但是注意到第一次还可以操作 \(b\) ,而后面两次顺序任意,所以迭代 3 次大概可以得到 4 组不同的 \((a',b',c')\) ,可以通过。
PE
又是这种打怪兽题&&又被这场CERC教做人了。
先是一个简单转化:给 \(t\) 挂一个加 \(C=+\infty\) 血量的点,问是否能做到最终血量至少为 \(C\) 。
然后考虑一条链的情况。把连续的扣血加血合并为一个点;如果先 \(-a\) 再 \(+b\) 再 \(-c\) 且 \(b<a\) ,那么可以合并成一个 \(-(a-b+c)\) ;\(+a,-b,+c~(a>b,c>b)\) 同理。最终会获得正负交替且绝对值递增的一个序列。
然后发现一个子树也可以用归纳法缩成一个这样的序列,就做完了。
LI
经典题了。最短的连续段一定只有一个,并且左端点一定是尽可能大。提交记录
AI
怎么大家都是随机冲过去的……提交记录
RJ
先用 a=? max ? , b=a max a , c=b max b
等等造一个概率极大的 255 ,然后这东西平方就是 1 ,每次自加就可以获得所有 \(2^k\) 。提交记录
SF
求出多项式比较麻烦,但次数不超过 6 ,所以可以枚举 \(n\) 然后拉格朗日插值。
II
等一个看得懂的题面。
HG
设 \(A\) 希望平局, \(B\) 希望赢。
考虑先求出每个人从每个点开始是否会结束。先做一个简单转化:把一个点拆成两个,分别表示在这里 \(A\) 先走和 \(B\) 先走;无处可走时若 \(A\) 先走且则为必败态,否则为必胜态。然后 \(B\) 的目标是取得胜利,\(A\) 的目标是不输。然后用经典方法:若一个点指向的都是必胜态则必败,若有一个是必败态则必胜。递推结束后所有不能确定状态的点如果是 \(A\) 先走则必胜,\(B\) 先走则必败。
然后挑出所有 \(A\) 先走必败和 \(B\) 先走必胜的点,把其他点删掉,求出从这些点开始走是谁 win 谁 lose (以下称胜败为是否平局,win/lose 为真正的胜负)。所有无路可走的点都是必 lose ,然后同样大力转移,最后状态不确定的点全都是 \(B\) lose 。
正确性感性理解一下就好了(
RE
枚举左端点,右端点无脑取到能使得X
数量相等的最远的位置,使用哈希判断形状是否相同。
哈希就无脑 \(\sum a^xb^y\) ,然后平移到 \(\min x=\min y=0\) 。提交记录
LL
一开始以为是什么神奇扫描线,然后发现坐标范围小得离谱……这都给的什么题啊……
然而还是调了很久…… 提交记录
OA
设 \(dp_{x,y}\) 表示考虑了 \(x\) 的子树,满足 \(y\) 到 \(x\) 的链全都是空的,的最大个数。
转移时需要考虑所有以 \(x\) 为 \(lca\) 的路径。先设 \(w(i,j)\) 表示如果有一条 \(v_i\) 子树到 \(v_j\) 子树的路径那么 \(v_i,v_j\) 的最大贡献是多少。然后设 \(f_{s}\) 表示集合 \(s\) 中的儿子已经配对的最大贡献,枚举新的一对来转移。最后枚举 \(y\) ,设 \(y\) 所在的儿子为 \(u_y\) ,则 \(dp_{x,y}=f_{S-\large{u_y}}+dp_{\large{u_y},y}\) 。
复杂度 \(O(n^2+2^{deg}n)\) 。 提交记录
FB
由于 \(n\) 只有 \(10^4\) ,所以只要能求出哪些区间能够架桥就做完了。
枚举右端点,从右往左枚举左端点,会得到这个区间的桥的圆心。那么如果区间内有一个点的纵坐标大于圆心且距离大于半径就不合法,如果没有则合法。
圆心的路径是一个 \(y=x+b\) 的直线,考虑每个点对这条直线的限制,在圆心的纵坐标降到一定高度之后就是一个二次不等式,可以解出一个区间,所以在左端点往左移动的时候动态加入一个区间,如果左端点在这些区间的交里面那就合法。
写得好看一点就 \(O(n^2)\) 了。
然后又被正解打爆了:注意到半圆的一半是有单调性的(上界一直在降低),所以把两边的限制拼起来即可。提交记录
QD
什么神仙东西……
把操作序列倒过来,那么等价于求一个最短的 Brauer chain (序列 \(\{a_i\}_{i=0}^k,~a_0=1,~a_i=a_{i-1}+a_j~(j<i)\))。设 \(s\) 为 \(n\) 的位数,\(t\) 为 \(\text{pop_count}(n)\) ,那么 \(k=s+t-2\) 的 Brauer chain 是很容易构造的。如果 \(k<s+t-2\) ,那么一定有 \(k\le s+1\) 。根据 \(a_k=n,~a_i\le 2a_{i-1}\) 可以得到 \(a_i\ge 2^{i-2}\) 。然后爆搜所有满足这个条件的 Brauer chain 即可。
DA
又双叒叕是计算几何……
感性理解加题解的理性证明即可得到,线段所在的直线至少过多边形的两个顶点。所以枚举两个顶点,把在多边形内的线段全部搞出来即可。
TC
先把操作树建出来。这里的操作树是一个多叉树,每个儿子要么是一个字符,要么是括号内的一堆东西组成的树。只有叶子才是组合器。(当然,加几个括号写成二叉树也不影响。)
由于唯一一个能省操作次数的组合器就是 K
,所以容易想到贪心的策略:先把第一个括号拆开,然后尝试把后面的一些东西消掉,然后再拆后面的。
由于每个组合器最多对三个子表达式操作,所以一个操作树化简之后必然可以使得每个点的儿子数量不超过 3 。且通过拆括号可以使得每个点的第一个儿子是叶子。
先把第一个儿子化简,然后如果它不是叶子就直接把儿子的儿子连过来并把它删掉。此时第一个儿子一定是叶子,尝试用它化简其它儿子。如果成功就重新来一遍这一段的过程,否则把后面的儿子化简并返回。
复杂度显然是线性的。提交记录
AE
大力哈希一下即可。提交记录
CB
题面扯了半天,其实就是每个元素有一个 \(w\) ,贡献系数是 \(size-1\) ,其中 \(size\) 是所在组的大小。
显然存在一个最优解,使得把元素从小到大排序后每一组都是一个区间。显然有决策单调性,但更好写的做法是注意到区间长度单调不增,因此最后一段长度不会超过 \(len/k\) ,所以直接枚举决策点也可以 \(O(n^2\log n)\) 。提交记录
(关于段数有没有凸性呢?从打表的结果看好像是凸的?)
GF
每一个段可以使得横纵坐标分别加上 \(n-1\) 和 \(n\) ,而最后一次只能最多加上 \(n-1\) ,所以这给出了答案的下界。构造时有点细节。提交记录
AG
无脑枚举一边的 \(\max\) ,那么另一边可以用双指针枚举,然后用 2-sat 判断即可。复杂度 \(O(n^4)\) 。注意卡常。提交记录
JC
口胡。
看不懂题意,也不想看。大概就是先模拟建出仙人掌,然后输出一组最少的路径覆盖它。
考虑如何用最少的路径覆盖一个图。如果度数都是偶数则直接欧拉回路,否则一个显然的下界是奇度数点除二。达到下界只需要把奇度数点两两连边,跑欧拉回路,然后把连的虚边断掉。
PA
发现合法的时候一个数只可能在 4 个位置,然后稍微模拟一下即可把矩阵的上半部分全部复原。对于下半部分先把第一列和最后一列复原。对于中间的部分,仍然可能需要交换两个数的位置。
先考虑简单的情况 \(\left[\begin{matrix}1&2&3&4\\5&{\color{red}7}&{\color{red}6}&8\end{matrix}\right]\) ,发现这竟然是有解的:R2 C3 R2 C3 R1 C2 R1
。然后再考虑另一种情况:
发现此时就无解了。由于这两个矩阵是其他矩阵的子矩阵,所以由它们容易构造出其他矩阵的解,或证明无解。提交记录
TH
枚举答案。如果有合法折线,那么一定存在一条合法折线使得除了起点和终点外经过的点都是三角形的顶点,就做完了。提交记录
EH
以前做过了(竟然还没有做出来)。注意到连两条对角线一定可以砍掉所有线段,所以只需要判断答案是否为 1 。
那就随便搞了。提交记录
AJ
不会。
TK
无脑DP普及难度。提交记录
EI
先考虑所有朝上的三角形,然后上下翻转再做一遍。
每个点处理出往左、往左上、往右上分别能走多远,然后枚举三角形的右下顶点,即可确定两个方向的边最多走多长,然后区间查询能满足第三条边的顶点个数即可。提交记录
UL
直接枚举两个区间合并会复杂度爆炸,需要换一种思路。考虑积分每一个高度的面积得到体积。一个高度对应的横坐标长度和纵坐标长度分别都是分段一次函数,乘起来就是分段二次函数,就可以做了。
AF
假设已经确定了在哪个时间发出快递,如何求出最短时间。注意到如果可以经过某段时间相遇,那么再陪跑一段路程也是合法的,所以可以二分最短时间,然后直接往预判的位置走,看能否比另一个人早到达。
那么可以先在外面二分答案,把第二个人的时间平移一下,即可知道第一个人在某个时刻发快递的目标点。由于两个人的位置都是分段函数,每一段都是一个线段,所以可以转化为判断两个线段是否合法,随便做。
SK
然而没有题解,是看代码悟出来的 /fad
这位老哥怎么三题都是计算几何好惨啊
考虑怎么判断连接两个点是否合法。确定一个点 \(A\) ,枚举比它编号大的点,那么每个点都会有一个限制:线段对应的射线的极角必须在一个区间内。
然而只看这些限制还不够,因为可能 (0,0),(0,5),(0,1)
,然后就折回来了。补救的方法是从编号大的点开始往小的也枚举一遍,就可以把这种情况排除掉。
BH
你以为答案有规律?
但正解是无脑递推二次函数!
真尼玛是个垃圾题,算死我了…… 提交记录
RD
又是普及组DP…… 提交记录
OK
二分答案,然后相当于找一个长度为 \(K+1\) 的元素序列,使得每个元素的收益不低于前面所有的代价加答案。简单分析一下可以得到一定是按照收益从小往大选,然后就可以随便 DP 了。
从后往前 DP 甚至可以省掉二分答案,但是懒得搞了。提交记录
FC
好像是个垃圾模拟题,跳了。
JD
好像是个垃圾计算几何题,跳了。
好像可以直接辛普森,但算一个点的函数值还是很恶心……
OE
显然任意时刻不能出现两个大的夹着一个小的的情况,所以序列一定是单峰函数。状压 \(L\) ,就有 \(R=sum-L\) ,然后枚举下一个放到哪里即可。
简单题就是用来调的…… 提交记录
TF
先把值域离散化,把相邻相同的合并。此时一个分段方案合法,当且仅当段只有三种:
- 段只有一个点。
- 段内有两个点,颜色分别是 \(c\) 和 \(c+1\) ,且对于每个 \(c\) 只有一个这样的段。
- 段内有多个点,分别是 \(c,c+1,\cdots,c+l\) 。那么 \(c+1,\cdots,c+l-1\) 这些颜色都必须在整个序列中只出现过一次。
第三种比较奇怪,但是容易用调整法证明,如果相邻两个位置是 \((c_0,c_0+1)\) 或 \((c_0-1,c_0)\) ,且 \(c_0\) 在整个序列里只出现过一次,那么它们一定在一个段中。可以把这些位置缩起来,用 \(n+10\) 隔开两边。
现在,我们需要最大化第二种段的数量。考虑所有两个元素之间的空隙,如果它两边分别是 \(c,c+1\) ,那么称这个空隙的颜色是 \(c\) 。我们需要选出尽可能多的空隙,满足每种颜色最多选一个,相邻两个空隙最多选一个。显然空隙组成了一些连续段,每一段的颜色也是连续递增的。
考虑一种颜色 \(c\) ,如果它出现了 3 次或以上,那么最多 \(c-1\) 和 \(c+1\) 分别卡掉它的一个出现位置,一定还剩下一个位置,所以它一定可以被选。剩下的每种最多出现两次,随便 DP 。
代码实现自然不必这么恶心。提交记录
(又调了一年,代码能力捉急……)
FF
满脑子数据结构优化建图,于是完全不会。
先把所有线段按“从上到下”排序,即如果线段 \(i\) 的某个点能滴到 \(j\) 则连边,然后求一个拓扑序。这个可以用扫描线求出。
然后“从上到下” DP :\(dp_{i,x}\) 表示考虑了前 \(i\) 个线段,要从坐标 \(x\) 处滴下来,的最小代价。加入一个区间的时候搞搞搞。注意到 \(dp_i\) 是一个先单调不升再单调不降的函数,然后就可以做了。
DD
就是二维平面上有一些红点和蓝点,要选出一对,使得组成的矩形面积最大。
分别求出可能被选中的一些点,它们的纵坐标随着横坐标升高而递减。然后就有经典的决策单调性。
CJ
又被计算几何打爆了……
看做在平面上一些黑点和白点,那么选 \(S,T\) 就等价于用两个平行线去卡黑点组成的凸包,求平行线内部的白点。
平行线的有用斜率显然只有几种,分别是每个白点与凸包切线的斜率。
那么如何判断线之间的点个数呢?凸包内部的一定会被算上,其他的点要在中间,等价于平行线的斜率在它的两个切线之间。
HK
先把给出的两个地图和目标地图的没有 *
的边界删掉,使得上下左右至少一个 *
。
判掉两个重合的情况,那么必然有一个地图的边界一行或一列是不变的,那么它的位置就确定了,进而另一个的位置也确定了。
然后题解的做法仍然更为简单:看左上方的 *
,三个里面必然有两个是位置重合的。提交记录
MJ
考虑每一组城市,然后贪心用括号匹配求出最多的往返票个数即可。提交记录
FG
无脑树上后缀排序即可。提交记录
GL
在序列上这个问题非常简单,从左往右扫一遍即可。到树上,发现把被覆盖过的边保留下来之后每个点的度数不会超过 2 ,那么就转为序列了。提交记录
AL
毒瘤计算几何,裂开了。
\(m\) 非常小,求出对偶图跑 BFS 即可。
然而并不是。求对偶图会爆精度,只能把线段分别取出来,考虑两个方向,用扫描线连边。
然后被各种蛇皮细节打傻了…… 提交记录
FI
大模拟,告辞。
IC
考虑怎样给一个仙人掌加一条边。建出圆方树,但稍微魔改一下,只有两个点一条边的点双不建方点。那么连接两个点的边合法当且仅当两个点树上的路径上没有方点。
要先删掉一条边,就稍微讨论一下即可。提交记录
QC
怎么这种题也能被放出来…… 提交记录
MD
尝试找性质找了 2h 无果,于是直接冲构造,发现非常 sb …… (最近想非简单题的时间好像越来越长了)
先考虑一维的情况,可以有这么一个策略:有 \(n\) 个格子时,先把盘子分成 \(n-1\) 组,每组分别放到前面的每一个格子,使得每个格子从下到上单调递增,然后把前面所有格子得到的结果归并到最后一个格子。所以 \(n\) 个格子能保证合法的个数至少是 \(f_n=\sum_{i<n} f_i\) ,而 \(f_1=1,f_2=2\) ,所以 \(f_n=O(2^{n})\) 。
然后这个构造可以很轻松地扩展到二维,此时有 \(f_{6,6}=42960\) 。
OJ
我会LCT维护最小生成树+主席树!
抱歉,这两个都直接暴力也不会 TLE/MLE 。提交记录
HI
考虑直接模拟 dfs 的过程。
对于当前已经走过的点,如果还在栈中,那么石头摆到往当前儿子的通道左边;否则,摆到某一个通道右边,这个通道要连向能跳到最远祖先的点。尝试往一个儿子走的时候,也把石头摆到左边,然后走过去。如果没有遍历过就非常好,否则是一条返祖边或横叉边,我们需要走回去。
根据之前摆石头的方式,此时如果一直沿着有石头的通道走,一定可以走回原来那个点,我们只需要求出环的大小,并不破坏以前的石头位置。分类讨论一下这条边是返祖边还是横叉边即可。
一个点的儿子遍历完了,需要回溯时,也用类似的方法。
因为思路不清晰而调了一年…… 提交记录
KK
考虑怎样判断一个局势是否能赢。不同色的会尽量把你盖掉,如果能盖到不超过一个那就一定不能赢,否则比较个数。所以随便做。提交记录
JH
对于中位数,好像唯一的思路就是求中位数大于每个值的链的个数,然后再转为求和大于 0 的链的个数。
由于树随机,不妨暴力一点,点分治之后每次把一条边从 1 变成 -1 时 \(O(size)\) 暴力统计贡献。实践证明复杂度是对的。
肯定有更简单的做法,但是已经放弃思考了……
OB
直接线段树维护凸包即可。提交记录
BK
粗略的感觉是两个环的交也必须是均匀的,然后就不知道自己在干什么了……
首先把图中的桥边都删掉,它们显然不影响答案。
考虑两条边,如果把它们删掉之后图被分成了两个连通块,那么对于任意一个环,它们要么都在里面,要么都不在里面。可以发现这是一个等价类关系,我们能以此把图中所有边分成若干个等价类(某一些等价类可能只有一条边)。那么答案就是每个等价类大小的 \(\gcd\) 。
证明:充分性显然,必要性如下。考虑一个等价类中的边,把它们摆成一个环的样子,那么整个图会变成一个大环套一些小边双。每个边双会有两条路径,加上等价类中的边刚好组成两个环,这两个环的交恰好是这个等价类,所以这个等价类里的边必须是均匀的。
某一个题解:https://www.youtube.com/watch?v=wroQ7zGgYzk
GJ
枚举前 \(k\) 大里面最小的 \(e_0\) ,把其他边的权值设为 \(\max(0,w-w(e_0))\) ,然后跑最短路,然后加上 \(k\times w(e_0)\) 。显然最优解一定会被考虑到,并且不会求出假的更优解。
KE
我直接懵逼……
矩形的宽度对答案是单峰的,然后宽度固定的时候左端点对最大面积也是单峰的,然后用一堆二分确定点坐标,再三分套三分。
证明?你还想要证明?
CA
由于题目的性质, \(n=\sum a_i\) 时每个糖一定恰好吃了 \(a_i\) 个。所以只要能再吃 \(2\sum a_i\) 而不挂掉就一定是 forever
。
怎样尽量活得最久呢?每个糖求出它在接下来的几步内必须再吃一个,然后无脑贪心即可。
IK
只有一条出边的缩起来,有多条出边的枚举选哪一条,看是否入度均为 1 且在一个连通块内即可。
LE
直接设 \(dp_{x}\) 表示把 \(x\) 子树塞进足够大的格子的方案数,考虑如何转移。
如果 \(x\) 的有两个儿子,那么只能一个往右一个往下,并且其中一个还必须是一条链。这种情况容易处理。
否则,如果 \(x\) 子树就是一条链,那么可以预处理出方案数。
否则,枚举在哪个点第一次往下走。如果这个点只有一个儿子且儿子度数也为 2 那么只能往右拐,否则就是第一个有两个儿子的点,需要大力分类讨论一下。
RI
用叉积求面积,显然只要奇偶性对就行。
那不是有手就行
LK
由于 7 是质数,所以只要 7 位数字不全部相同,合法的位置就是唯一的。转化为模 7 意义下区间加,使得整个序列为 0 。显然可以差分,且差分之后位置关系不重要。
考虑一次 \((+x,-x)\) 的操作,就在这两个点之间连一条边。如果同时出现 \(t,7-t\) ,那么可以把它们连出去的边全部转移走,然后一条边就可以把两个一起删掉。所以现在只有 3 种数了。
考虑一个连通块,只要和是 7 的倍数就一定可以用一棵树把它删完,所以就是求最多的连通块数,随便做。提交记录
PD
先跑一遍 01 BFS 求出到每个点的最短换乘次数,然后把合法的边保留下来跑最长路。
仗着正解是 \(O(n)\) 就使劲开大数据范围还卡空间的出题人是屑。
JE
定义一个点在输掉这局之后走到的点为这个点的 \(fail\) 。
当知道初始节点时,我们可以构造一个点数相同的图,每个点都选择能打败对应点的 move ,然后跳到对应点的 \(fail\) 的对应点。
不知道初始节点,但可以通过一些步数把它试探出来。考虑一个集合 \(S\) ,表示初始节点可能在 \(S\) 里。如果 \(S\) 中的 move 存在不相同的,那么一步就可以把它们区分开;否则可以先赢这一步。到 \(|S|=1\) 时就确定了初始点,接下来就可以全胜了。然而有可能永远都到不了 \(|S|=1\) 的情况。考虑两个点一直跳 \(fail\) 跳出的操作序列,一定会成环,而一旦经过 \(2n\) 步之后仍然无法区分,那么根据周期引理,这两个无限序列一定是相同的,可以作为同一个点看待。
所以要拆分 \(n-1\) 次,每次拆分最多需要 \(2n\) 步,最终的点数不会超过 \(2n^2\) 。提交记录
LB
如果能每头牛求出最终包含它的栅栏,每个栅栏的右上角求出在它之前包含它的最靠左下的栅栏,那么就可以建出一棵树,每个栅栏的答案就是子树和。
这可以从右往左扫描线,维护所有现在能往左伸的栅栏。加入一个右上角时,把在它下面且比它晚的向左的栅栏全部删掉,并且它的父亲就是它上面第一个比它早的栅栏。
HB
好像做过?
前缀还是用字典树比较好处理,而每个串只有两种情况显然对应 2-sat 。把每个串的两种情况都插入字典树中,然后树上随便优化建图即可……吗?
出题人给了 \(n=500000\) ,而字典树上一个点可能会有很多个串,此时前后缀建图的常数非常爆炸,难以通过(或者是我写得实在太丑)。但是注意到一个点 \(x\) 的串只能选一个在这里,而要变到其他地方去也只有 \(dep_x\) 种方案,所以 \(cnt_x>dep_x+1\) 时一定无解。如果 \(cnt_x\le dep_x+1\) 那么 \(cnt_x^2\le cnt_x(dep_x+1)\le \sum (|s|+1)\) ,所以可以直接暴力建图。
BL
除了无脑哈夫曼树以外也想不出更好的做法了,可是复杂度也不怎么会证明……
RG
每个儿子的子树乱搞一下即可。提交记录
AH
这个带状矩阵消元未免太裸了一点?就是被精度卡得有点傻 /fad
AK
直接倍增即可。提交记录
GG
二分答案之后枚举 \(x\) ,数据结构维护 \(y\) 。提交记录
JG
150 道题,以一道构造结束。
由于交互器特别贪心,可以在它走第一步之后往角落走一步,假装没有任何威胁,那么它就会继续扩展自己的第一步。在它走出 3 个之后才开始堵它,就可以在角落里获得两个子的优势。
然后最好的方法是自己写一个交互器然后大力手玩。提交记录