6.17 CWOI 考试题解
A 跳跃
首先定义 \(T _ 0 = k,T _ {n + 1} = m,B _ 0 = B _ {n + 1} = 0\)。
很显然这是个 DP。因为往回走之后再往前走一定不优,所以满足无后效性。
然后考虑暴力,钦定第 \(i\) 个胡萝卜被吃,枚举上一个从哪里来,设为 \(j\),因为中间的钦定不吃,所以我们可以前面全部走 \(D\),最后再补齐,因此代价是 \(A \lceil \frac{T _ i - T _ j}{D} \rceil\)。因此就有转移方程 \(dp _ i = \max \{ dp _ j + B _ i - A \lceil \frac{T _ i - T _ j}{D} \rceil \}\)。
然后考虑优化,发现不搞掉那个向上取整啥优化都用不了,所以考虑拆掉它,然后就开始推式子:
设 \(A = \frac{T _ i \bmod D}{D} - \frac{T _ j \bmod D}{D}\),则 \(A \in (-1,1)\),接着分情况讨论:
- 若 \(A \gt 0\),则对原式的贡献为 \(1\)
- 若 \(A = 0\),则贡献显然为 \(0\)
- 若 \(A \lt 0\),则因为向上取整贡献为 \(0\)
因此,原式等于 \(\lfloor \frac{T _ i}{D} \rfloor - \lfloor \frac{T _ j}{D} \rfloor + [T _ i \bmod D \gt T _ j \bmod D]\)。
然后转移方程就可以拆了,转化为 \(dp _ i = B _ i - A\lfloor \frac{T _ i}{D} \rfloor + \max \{ dp _ j + A \lfloor \frac{T_ j}{D} \rfloor - A[T _ i \bmod D \gt T _ j \bmod D] \}\)。前面的直接放到线段树上,每次算完 \(dp _ i\) 之后尝试更新 \(T _ i \bmod D\) 处为 \(dp _ i + A \lfloor \frac{T _ j}{D} \rfloor\)。然后算 \(dp _ i\) 的时候分类讨论,查询 \([0,T _ i \bmod D - 1]\) 的结果减去 \(A\) 后与 \([T _ i \bmod D,D - 1]\) 的结果取 \(\max\) 后作为方程中的 \(\max\) 部分正常转移就做完了。
B 断句
我们考虑两个字符串匹配的充要条件,记 \(dis _ i\) 表示字符串中 \(i\) 距离上一个 \(i\) 的距离,没有则为 \(0\),则条件为 \(\forall i \in [1,len],dis(S) _ i = dis(T) _ i\)。这样就转化为了普通字符串匹配问题,可以直接哈希。
然后考虑平移区间,我们删去本区间的第一个元素,会导致下一个数字相同的位置的 \(dis\) 变为 \(0\),所以可以找到这个位置,然后直接修改哈希值就行了。然后就没影响了,加入一个数很简单,乘上 \(Base\) 再加上新的数就行。
C 图
典型的口胡容易证明难(
大胆口胡,答案就是 \(S \to T\) 的最短路长度,然后方案就是 \(ans _ i = \min \{ \max \{ dis _ u,dis _ v \} ,dis _ t\}\)。
大胆猜想一下,发现是对的,因为这相当于给图分层染了下色,每一层就是一个割,如果 \(dis \gt dis _ t\) 则说明这个点和 \(S \to T\) 的最短路无关。
D 异或
首先给出一个结论: 若 \(a \lt b \lt c\),则 \(\min (a \oplus b,b \oplus c) \ge a \oplus c\),证明可以从高到低分类讨论。
然后我们就有一个 \(\Omicron(n ^ 2)\) 的做法,\(dp _ i = \sum _ j dp _ j[a _ i \oplus a _ j \ge x]\)。
然后考虑优化,我们依然考虑从高到低分类讨论:
- \(a _ i\) 第 \(j\) 位为 \(1\),\(x\) 第 \(j\) 位为 \(1\),则这一位取值只能是 \(0\)
- \(a _ i\) 为 \(0\),\(x\) 为 \(1\),只能是 \(1\)
- \(a _ i\) 为 \(1\),\(x\) 为 \(0\),可以为 \(1/0\),如果为 \(1\) 则有取值范围限制
- \(a _ i\) 为 \(0\),\(x\) 为 \(0\),可以为 \(0/1\),如果为 \(0\) 则有取值范围限制
上面的取值范围限制就是我们可以转移过来的区间,二分找出来然后用前缀和优化就好了。