2024CCPConline部分题目
D
题目链接:2024CCPCOnline
看s与t均小于100,故往dp的方向想。
设$dp[i][l][r]$为s枚举到第 i 位时,以t 中(l,r)为子序列在解码中出现的次数。
则有转移方程:
还需要考虑$s[i]$在(l,r)中出现的情况,即$t[k+1]==s[i]$时:
代码:
1 |
|
J
题目链接:2024CCPCOnline
看到维护两个sum的异或值,想到线性基。
两数列中对应值的互换本质上是$sum \oplus a[i] \oplus b[i]$,故可对$a[i] \oplus b[i]$建立线性基。
这里需要强调一下线性基的性质:$d[i]$若不为0,第 i+1位必为1。
故有基本思路:
若(sum1>>i)&1与(sum2>>i)&1均为0,则continue
若(sum1>>i)&1与(sum2>>i)&1均为1,则sum1^d[i] , sum2^d[i]
若(sum1>>i)&1与(sum2>>i)&1不相等时,需要考虑前一位的。
- 若为$\begin{matrix}1 & 1\\\ 0 &0\end{matrix}$需对 i 位进行处理,这样会使大的变小,小的变大
- 若为$\begin{matrix}1 & 0\\\ 0 &1\end{matrix}$我们对 i 位不处理
若为$\begin{matrix}1 & 0\\\ 1 &1\end{matrix}$或$\begin{matrix}0 & 1 \\\ 0 & 0\end{matrix}$我们不确定是否需要处理,那就都算一遍,取min,且不论取不取,大小关系已确定,后面的位处理时只需要无脑让大的变小即可、
代码:
1 |
|
2024CCPConline部分题目
https://shepherdzzx.github.io/2024CCPCOnline部分题目/