做题记录 26.4.4

QOJ #15326. Yet another 01 problem

特判 \(n=1\) 的情况

考虑确定树的结构后如何统计确定边权的方案

若点 \(u\) 两个儿子都是叶子,则两个儿子的权值(到根的路径的边权异或和)必须不同,此时两者的边权取决于 \(u\) 到根的路径的边权异或和

\(u\) 只有一个儿子为叶子,则其边权同样取决于 \(u\) 到根的路径的边权异或和,另一个儿子取决于两者

若两个儿子都不是叶子,则可以随意确定边权

从而方案数为 \(2^{c_0}\),其中 \(c_0\) 表示两个儿子都不是叶子的结点数量

等于 \(2^{c_2-1}\),其中 \(c_2\) 表示两个儿子都是叶子的结点数量

\(2^{-1}\) 单独提出来,则 \(2^{c_2}\) 等价于钦定满足条件结点的一个子集

选出相邻对的一个子集(不能同时选择两个相交的相邻对),若选出的中存在相邻项相同的则系数乘以 \(-1\),最后乘以卡特兰树构建树结构的系数

容易分治加 \(\text{NTT}\) 做到 \(O(n\log^2 n)\)

代码

参考

QOJ #14951. Leo

设输入为 \(I_{1\sim n}\)

\(a_n=I_n\)\(a_i=I_i\text{ or } a_{i+1}\text{ or } a_{i+1}\),则 \(a\) 相当于令每个 \(I\) 取它及之后第一个非 \(\ast\) 的字符(可能有一段后缀 \(\ast\)

\(f_1=a_1\)\(f_i=f_{i-1}\text{ and }a_i\),则 \(f\) 相当于令 \(a\) 自第二种字符第一次出现起全都变为 \(\ast\)

\(b_1=f_1\)\(b_i=f_{i-1}\text{ or }a_i\),则 \(b\)\(a\) 只有第二个字符第一次出现的位置处字符不同,且 \(b\) 在这一位置出现的字符为 \(a\) 第三种字符

答案为 \(a_1\text{ or }b_1\text{ or }a_2\text{ or }b_2\cdots a_n\text{ or }b_n\)(注意 此处 \(\text{or}\) 没有结合律

总元件数量为 \(6n-O(1)\)

代码

参考

QOJ #15325. Yet another permutation problem

对于一个最终状态,考虑如何判定是否可达

先判断最大值和最小值相对位置,若前后不同,则交换之

然后找到最小的位置 \(x\),使得两个状态的 \([1,x]\) 的元素集合相同,递归为 \([1,x]\)\((x,n]\) 分别处理

对这个过程 \(dp\),可以做到 \(O(n^3)\)

代码

参考

posted @ 2026-04-05 07:40  Hstry  阅读(17)  评论(0)    收藏  举报