24.11.17

Heoi好题分享

He(ngEr)oi 好题分享
怎么每次 NT 都找黑啊/jk

P5362

NT 的
关注 @Nt_Yester 谢谢喵

对于 \(\textbf{T.M.}\) 的序列除了题里那个鬼畜定义还有几种生成方式:

  • 初始令 \(T_0 = 0\),然后每次将原串按位取反拼接到原串后。
  • \(T_i = \operatorname{popcount}(i) \bmod 2\)
  • 初始令 \(T_0 = 0\),然后每次令 \(0 \to 01, 1\to 10\)

对于本题采用第三种,因为注意到第三种是可逆的(\(01 \to 0, 10 \to 1\))。
并且题解说对于长度大于 \(3\) 的串,逆操作能得到的合法串是唯一的。

所以直接记搜。
每次把串分别从 \(S_0\)\(S_1\) 开始相邻两个划分,如果划分出的两个数相同那么划分方案是非法的。
如果两侧有单个字符其实也是确定的。
缩减完后的串长应该是 \(\lceil len / 2\rceil\),所以 \(k\) 如果不用补前面的 \(S\) (即 \(S\) 最后两位刚好划分成一组)应该也是缩到 \(\lceil k/2\rceil\),不然就是 \(\lceil (k - 1) / 2 \rceil\)

P8024

我的
关注 @KinNa_Sky 谢谢喵

AT_agc002_e

yyzz 的
关注 @鳶一折紙 谢谢喵
24.11.17 让我们祝 TA 生日快乐!

好古早的题/jk

从大到小排序,那么操作就变成了吃下面一行或吃左面一列。
或者也可以看成从左下角只能向右或向上走格子,走到边界的人输。

\(f(x, y)\) 表示 \((x, y)\) 点先手胜负。那么有 \(f(x, y) = f(x + 1, y + 1)\)

证明:

  • 如果 \(f(x + 1, y + 1) = 0\),那么 \(f(x + 1, y) = 1, f(x, y + 1) = 1 \Rightarrow f(x, y) = 1\)

    10
    01
    ^
    (x, y)
    
  • 如果 \(f(x + 1, y + 1) = 1\)
    假设 \(f(x, y) = 0\),那么 \(f(x + 1, y) = 1, f(x, y + 1) = 1\),因为 \(f(x + 1, y + 1) = 1\) 所以 \(f(x + 2, y) = 0, f(x, y + 2) = 0\)\(\Rightarrow f(x + 2, y + 1) = 1, f(x + 1, y + 2) = 1\),矛盾

    01
    111
    010
    ^
    (x, y)
    

    所以 \(f(x + 1, y + 1) = 1 \Rightarrow f(x, y) = 1\)

所以求从原点往右上角走到不能走,求这个点的胜负就好了,这个点只能往左或往上,直接求向左和向上的步数奇偶性判断,有一条路能赢就赢了。

CF1313D

PC 的
关注 @ZepX_D 谢谢喵

我是唐诗

如果一个孩子得到的糖果量是偶数(可能为零),那么他(或她)会很伤心。不过,其他孩子(收到奇数个糖果的孩子)会很高兴。

KinNa:所以必须要有一个孩子得到的糖果量是偶数是吗。

不是

关键性质 \(k \le 8\)。不难(?)想到状压。
然后由于每个点至多被 \(k\) 条线段覆盖,可以从左到右扫一遍,给每条线段分配一个当前空闲的新编号(\(0 \sim k\))用来状压。

P5008

苗姐的
关注 @TR__ 谢谢喵

首先不难想到如果图是一张 DAG,那么按照逆拓扑序能删掉任意有入度的点。
其次大胆猜测,对于一个强连通分量,最多一个点不能删。
考虑随便拿一个点出来作为起点 bfs,那么总能遍历所有点,按照逆 bfs 序总能删去任意点。另外,如果选的这个点有来自强连通分量外的入度,那么这个点也可删。

所以对原图缩点后有入度的强连通分量内部的点都可删,没有入度的强连通分量有一个点(自己选)不可删。
特别的,如果没有入度的强连通分量含有有自环的点,那么所有点都可删。

贪心的让权值最小的点不可删,然后取所有可删的点前 \(k\) 大就好。


闲话

有人学 Tarjan 求点双问:所以它搜的时候不能算父亲是吗。
KinNa:是的,不能用它和父亲直接连的边(更新 low),但是子节点搜到它父亲更新是没问题的。
某:所以里面没有环是吗?
KinNa:?环都没有求什么点双?

posted @ 2024-11-17 20:20  KinNa_Sky  阅读(7)  评论(0编辑  收藏  举报