CF
CF2138 (Round 1048 Div. 1)
20250908
CF2138A
正难则反。注意到到达状态 \((x,y)\) 的方案在 \(x\neq y\) 时唯一确定,我们只要倒推到 \(x=y\) 就好了。
CF2138B
fun fact:赛时几乎所有人都对着错误的题面想出了正确的做法 /xk
因为只有恰好一次使用 \(2\) 操作的机会,所以如果出现 \(3,2,1\) 这样的情况就不合法。
然后维护 \(pre,nxt\) 表示 \(2\) 前第一个 \(3\),\(2\) 后第一个 \(1\) 的位置,然后维护 \(R_i\) 表示 \([l,r]\) 合法当且仅当 \(r\leq R_l\)。
CF2138C1,C2
注意到最优方案是让 \(lcs\) 是根到某一层的连续路径。
然后相当于做一个背包。
无脑做法是每做一层都判断一下当前背包是否合法,复杂度 \(O(\frac{n^2}{w})\),已经可以通过 C2。。
进一步思考,设 \(m=\min_{i\in leaf}dep_i\),则 \(ans\in\{m-1,m\}\)。
所以只要背包做到 \(m\) 的时候判定是否合法即可。
然后可以不断二进制分组做到 \(O(\frac{n\sqrt{n}}{w})\)。
CF2138D
狗屎。说白了就是分类讨论。一直分类讨论。
拆贡献。求出每个位置的答案。
然后考虑把操作分类。然后找出每一类的个数,组合数算一下。
问题在于移动要算的位置的时候,需要快速计算每一类,一大坨细节。
CF2138E1
垃圾题。喜欢用线性代数知识考人。。
看到每行每列不能超过 \(3\),可以考虑带状矩阵构造。
有结论是,带状矩阵的行列式计算是递归的。同时只能用 \(0,1,-1\) 意味着 \(\det\) 的递推只有简单的 \(a\gets a\pm b\)。
然后在此基础上推一下。考虑 \(a_i\) 表示 \(i\times i\) 的左上角子矩阵的 \(|\det|\)。
然后考虑一种构造:\(a_{i-1}=|a_i-a_{i+1}|\)。注意到这样可以和一种合法 \(\det\) 序列对应。
然后枚举 \(a_m,a_{m-1}\),可以递归地向前构造。
可能构造不出来。多随机几次 \(a_{m-1}\)。
CF2147 Global Round 29
20250921
A,B,C 略。
CF2147D
首先要注意到的是:两个人的总分不变。
然后注意到一个数如果出现偶数次,那么两个人可以拿到相同的分数。
如果一个数出现奇数次,那么谁先抢到就可以得到分,然后变为偶数次。
于是就是贪心抢最大的奇数次的值。
CF2147E
考虑操作怎么加速。注意到答案一定是把 \(\operatorname{OR}\) 的一个前缀中的 \(0\) 变为 \(1\)。
然后枚举这个前缀的长度,然后从高到低考虑每一位 \(t\)(包括 \(\operatorname{OR}=1\) 的位)。考虑每次我们会把 \(a_i\gets 2^t\)。
如果有一个未选择的 \(a_i\) 的第 \(t\) 位是 \(1\),那么这一位不要代价,否则每一位可以选择一个未选择的 \(a_i\),然后选择这个 \(a_i\),然后代价是 \(2^t-(a_i \operatorname{AND} (2^t-1))\)。可以发现,对于更高的位 \(t\),如果需要代价,且找得到没有用到的 \(a_i\),且,一定优先匹配最大的 \(a_i \operatorname{AND} (2^t-1)\)。
CF2147F
同时考虑 \(p,s\) 比较困难。但是如果 \(p=1,\cdots,n\),那么维护是很简单的。可以简单使用线段树解决。
然后我们用线段树维护 \(s'=p^{-1}\circ s\) 的 \(s'\) 就好了。
然后修改 \(p,s\) 是简单的。
CF2150 (Round 1053 Div. 1)
20250924
惊险翻盘。
A 略。
CF2150B
被硬控 20min。。。什么水平。。
仍然是从小限制考虑,推出更大的性质。 我们考虑左右上角一定会被选择。
然后对于最大的那两个 L 限制,其余部分一定不会被选。
于是我们可以顺利推出 \(2\times 2\) 的 L 限制一定是纵列的那两个选一个。
同理,一直推到后面,可以得出,第 \(i\) 列的前 \(\min(i,n-i+1)\) 行有恰好一个黑色,并且后面的行全白。
然后考虑计数。考虑限制最紧的,也就是中间那行,然后向上递推求解。
CF2150C
往贪心思考就是输。
考虑直接 dp。我们考虑 Alice 选择了一个前缀,然后决策当前位置是否被 Bob 选。如果 Bob 选,那么后面 \(j>i,rk_j<rk_i\) 的位置全部都不能选。
于是直接 dp。设 \(f(i,rk)\) 表示 dp 到 \(i\),对于 \(rk_j<rk\) 的已经被钦定选不了的最大答案。
然后转移可以一位一位转移。用线段树维护。
CF2150D $^?$
太难蚌。
考虑枚举最后缩成的长度,而不是先拆贡献。。
考虑缩成长度为 \(k\),然后枚举左右两侧的奇偶性 \(x,y\),有:最后缩成的每一段的长度 \(f(i)=2g(i)+1(1<i<k),f(1)=2g(1)+x,f(k)=2g(k)+y\)。
然后就是有 \(S=\frac{n-x-y-k}{2}\) 个位置,可空插板,方案数就是 \(cnt=\binom{S+k-1}{k-1}\)。
然后考虑一个位置的方案和,我们发现每个位置地位相同,所以答案是 \(cnt\times suma\times(\frac{2S}{k}+1)\)。这里 \(suma=\sum_{i=1}^{n-k+1}\sum_{j=0}^{k-1}{a_{i+j}}\)。
预处理前缀和,然后枚举 \(k,x,y\),复杂度线性。
CF2150E1/E2
交互。一个想法是,考虑对位置分治,随机把 pos 分成两半,然后如果一个数同时出现在两侧,就直接忽略,否则向出现的一侧递归。
然后发现连 E1 都过不去。考虑卡一下常数,我们发现第一次递归,我们只要递归到满足 \(|pos|-ok=2cnt-1\) 的一侧就可以了。其中 \(ok\) 是出现两次的,\(cnt\) 是递归进去处理的数的个数。
然后顺便也能过一下 E2。
CF2152 (Round 1055 Div. 1 + 2)
20251003
A,B,C,D 略。
CF2152E
最后一步构造假了一下。有点唐。
脑电波。注意到没有限制一次查询的个数,我们不妨第一次查询全局的,可以得到一个前缀最大值序列 \(A_1\)。
然后考虑接下来每次扣掉之前在前缀最大值序列里的数,然后查询剩下所有的,得到新的前缀最大值序列 \(A_i\)。
考虑此时,如果有一次询问返回了 \(\geq n+1\) 个数,那么直接得到答案。
否则返回了 \(\leq n^2\) 个数,找到最后一个不在之前序列中的位置,考虑从这个位置开始构造。
我们从 \(A_n\) 向 \(A_1\) 找 \(pos\) 的前驱 \(pre\)(显然 \(a_pre>a_pos\)),并且让 \(pos\gets pre\)。
显然一定可以找到 \(pre\)。然后做完了。
要注意的是,选择 \(a_1,\cdots,a_n,a_x\),其中 \(x\) 是第一个不在之前序列中的位置 是错的。
CF2152F
我们设 \(to_i\) 表示最小的满足 \(a_j>a_i+z\) 的 \(j\)。
考虑贪心。我们首先贪心地令 \(p_1=l,p_2=l+1\),然后考虑 \(p_3\)。显然有 \(p_3=\max(p_2+1,to(p_1))\)。
我们观察 \(p_1,p_3,\cdots p_{2k+1}\) 和 \(p_2,p_4,\cdots p_{2k+2}\) 构成的路径,显然两条路径是交错的。
然后考虑如果直接贪心令 \(p'_k=to(p'_{k-2})\) 会怎样。我们发现,这样可能会出现 \(i\) 使得 \(p'_i=p'_{i+1}\),在两条路径上的表现就是,在 \(p'_i\) 处开始,路径重合了。
直接贪心有倍增做法。我们拓展一下,考虑建一个大的倍增表,每大跳一步表示从 \(p_1\) 跳到路径一开始重合的位置。同时记录实际正常跳了几步。
然后在这个位置,根据推导,我们有 \(p'_{i+1}=p'_i+1\),于是这个又变为一开始的情况。于是可以正确处理大倍增表。
查询的时候,先尽可能大跳,大跳完,此时怎么跳都不会让路径重合,所以接小跳。
复杂度根据实现是 \(O(n\log n)\) 或 \(O(n\log^2 n)\)。
CF2152G
树剖好啊。
我们要维护的是,一个点当前/连着子树被翻转后是否会成为叶子。
注意到修改 \(x\) 的子树,除了子树内的标记,会影响到的只有 \(x\) 颜色为黑/白的最近的祖先。
于是直接大力树剖。要维护的就是区间翻转,区间内颜色,区间叶子个数,区间颜色翻转后的叶子个数。
复杂度 \(O(n\log^2 n)\)。
当然,存在 \(O(n\log n)\) 的做法。
我们考虑一个黑点,如果被算作叶子,当且仅当子树内只有它一个黑点。
我们考虑用欧拉序来刻画这个限制。考虑进入白点时的值是 \(0\),出来是 \(1\),黑点是 \(2,3\)。那么答案就是 \(2323\) 子序列的最长长度的一半。
然后线段树用脚维护。
CF2152H1H2 $^?$
能做出 H2 是不是当且仅当用题解的方法做出 H1。
考虑找到满足要求的 \(S\) 的必要条件。不妨设 \(w\) 互不相同。
首先 \(S\) 要联通。我们发现,如果 \(\max_{e\in cut(S,U-S)}w(e)>\min_{e=(u,v),u,v\in S}w(e)\),那么我们把 \(S\) 按照 \((u,v)\) 断开,然后把存在左侧 \(\max\) 的一端删除,答案一定变小。正确性显然。
于是我们找到所有满足要求的 \(S\)。我们发现,这样的 \(S\) 只有 \(O(n)\) 种。
类似 kruskal 的,我们把边按照从大到小排序。一个包含边 \(e=(u,v,w)\) 的 \(S\),一定会包含相邻的 \(w\) 更大的 \(e\)。所以是 \(O(n)\) 种。
求出之后,建出重构树,就可以直接 dp 了。这样可以通过 H1。
观察转移式,这是经典 slope trick。于是直接上堆维护。当然线段树也可以。
复杂度 \(O(n\log n)\) 或 \(O(n\log n\log V)\) 之类的。反正 3s 怎么写都能过 H2。
其他做法存在可以过 H2 的吗。
CF2145 (Edu Round 183 Div. 2)
A,B,C 略。
CF2145D
正难则反卡了几分钟。
考虑正难则反,那么 \(rev=0\) 的就是不降子段。不降子段的计数是容易的,我们把序列按照 \(a_i>a_{i+1}\) 划分。不降子段就是不跨过划分的子段。注意到我们只关心划分间的段长度构成的可重集。
所以分拆数复杂度的 dfs 即可。其实不需要 dp。
CF2145E
线段树上二分板子题。考察点是你有没有学过。
然后我写错了。。线段树上二分可能需要记录前驱的贡献。。特别是前缀有关的信息维护。
实现可以区间加,单点二分。也可以单点修改,带记录前驱的二分。
CF2145F
首先需要注意到 \(M=\operatorname{lcm}(1,2,\cdots,10)=2520\) 是比较小的。
- 唐唐矩阵快速幂优化 dp 做法:
于是我们把格子每 \(M\) 个分段,这样两段的障碍是相同的,只有起始时间不同。
于是我们令 \(w(i,j)\) 表示:第一次进入当前段的时间 \(\bmod n=i\),出的时间是 \(\bmod n=j\) 的步数。
然后使用矩阵快速幂加速,复杂度是 \(O(T(n^2M+n^3))\)。当然也有其他复杂度的实现。
- 正解
注意到 \(a>1\),也就是相邻的两个位置不会同时出现障碍。
于是从 \(i\to i+1\) 格子,只要能走就贪心走,一定是最优的。不会出现无论如何都要在障碍上的问题。
于是 \(-1\) 当且仅当一个位置每次都会有障碍。
考虑直接模拟。我们记录 \(t,pos\) 表示经过的步数,当前的位置。
如果之前经过了一个 \(t'\equiv t\pmod n,pos'\equiv pos\pmod M\),那么这一段就是一个循环。此时可以直接计算得出中间的步数。
如果 \(pos'=pos\) 就无解。
然后最后一段继续模拟。
复杂度:\(O(TnM)\)。
CF2145G
唯一难点在于读题。
注意到是每次操作一行或一列,可以覆盖,所以我们倒着想,这样每种颜色相当于选择 \(x\) 行 \(y\) 列,然后删去,代价是 \(x+y\)(第一种颜色特殊处理)。问每种代价和的方案数。
于是枚举最后剩下 \(x\) 行 \(y\) 列,于是前 \(k-1\) 行的方案数是把 \(n+m-x-y\) 行、列非空划分成 \(k-1\) 组,每组组内无顺序,组间有顺序的方案数。
也就是 \(\displaystyle\binom{n}{x}\binom{m}{y}\begin{Bmatrix}n-x+m-y\\ k-1\end{Bmatrix}(k-1)!\)。
代价是 \(n-x+m-y+\min(x,y)\)。
直接算即可。复杂度平方。
如果求的是总方案数,则可以做到 \(O(k\log(n+m))\)。
CF2159 (Div. 1)
CF 弄 weak pretest 的出题人,你 * 什么时候 * 啊。Div. 1 能不能 ban rating < 2100 的出题人啊。
~ CF2159A
~ CF2159B
~ CF2159C
~ CF2159D1D2
首先感觉转移很困难啊。考虑观察性质。我们考虑一个代价 \(4\) 的转移,可以拆成两个代价 \(\leq 2,<2\) 的转移。代价更大的也是同理。
所以转移的代价 \(<4\)。
于是每次转移枚举代价 \(\in[1,3]\)。
直接考虑 D2。考虑一个重要的性质是,值域为 \(V\) 的序列,代价是 \(O(\log V)\) 的。
所以对于每个右端点 \(r\),我们发现,\(f(l,r)=v\),\(v\) 相同,\(l\) 是一段区间。我们直接维护每个 \(v\) 对应的区间。
直接二分 ST 表暴力转移做到 \(O(n\log V\log n)\)。
好像有更好的做法。。。TODO。。。

浙公网安备 33010602011771号