CWOI 5.13 模拟赛 T 134
全是思维赛时想不到一点
T1 灯
我们发现这是个区间修改,可以差分一下,转化为单点修改,则我们的需求就是把所有 \(1\) 变成 \(0\)。
建图,从 \(l\) 向 \(r + 1\) 连无向边,表示这次操作同时修改这两个位置,则图被划分成几个连通块。
明显的,有解当且仅当每个连通块内 \(1\) 的数量为偶数,因为我们每次都是操作两个位置,不是偶数最后一定会剩一个。我们考虑该连通块的一棵生成树,则我们只需要操作树边就能使该连通块合法。
叶子节点只有它与它的边能够修改它,所以我们发现一条边的儿子节点是 \(1\),就操作,否则不管。因为 \(1\) 的个数是偶数,所以一定能把 \(1\) 消完。
然后非树边任意就行,方案数是 \(2 ^ {tot}\),合法方案上面已经构造了。
T3 折纸
首先行和列是分别独立的,这个很显然,所以可以对行/列哈希之后当成一维做。
发现翻折等同于一个偶数长度的回文串,删掉一半。
然后我们考虑 DP,设 \(dpP _ i\) 表示删完前缀 \(i\) 是否可行,同理定义 \(dpS _ i\) 表示删完后缀 \(i\) 是否可行,记录 \(pre _ i\) 表示 \(dpP\) 的前缀和,\(suf _ i\) 表示 \(dpS\) 的后缀和。
两个的转移都可以枚举一个区间,判断是否回文,然后 \(dpP _ i = dpP _ i \vee dpP _ {i - len},dpS _ i = dpS _ i \vee dpS _ {i + len}\),初始 \(dpP _ 0 = dpS _ {n + 1} = 1\)。
发现转移是 \(\Omicron(n ^ 2)\) 的,又发现是回文,所以可以直接上 Manacher,然后因为从一个区间转移,用前缀和优化。考虑怎么统计答案,我们至少要留一个,所以一个方向的贡献是 \(dpP _ i \times suf _ {i + 2}\),两个方向的答案乘起来就是最终答案。
T4 钻石
什么神经随机化乱搞啊(
我们随机选一个点集 \(S\),一通手玩发现,每条边 $(u,v) $的贡献是 \(C _ {\text{popcount}(g _ u \wedge g _ v \wedge S)} ^ 2\),一个子图是钻石的充分条件是贡献和模 \(6\) 等于 \(1\),每个的贡献是可以用 Lucas 定理直接把下面的模 \(6\) 的,所以合起来多跑几遍就有可能跑出答案。