AGC12C Tautonym Puzzle

AGC012C Tautonym Puzzle

考虑在 \(A\) 的前 \(100\) 位递增地填上 \(1 \to 100\)

如果我们限制 \(A\) 的后 \(100\) 位里,\(1 \sim 100\) 每个数最多出现一次。后 \(100\) 位可以不填满。

那么 \(A\) 中好的子序列数量,就是后 \(100\) 位里严格上升子序列的数量。

问题转化成:构造一个序列 \(B\)

  • \(1 \sim 100\) 每个数最多出现一次。
  • 严格上升子序列数等于 \(N\)

构造方式如下:

枚举 \(x\)\(1 \to 100\),将 \(x\) 插入 \(B\) 中。

\(x\) 插入 \(B\) 的后侧,会让 \(B\) 的严格上升子序列数 \(\times 2\)

\(x\) 插入 \(B\) 的前侧,会让 \(B\) 的严格上升子序列数 \(+1\)

\(N\) 二进制拆分即可。上面的 \(x\) 最多运行到 \(2\log N\) 就能构造成功了。

构造出来的 \(B\) 长度 \(2\log N\),对应 \(A\) 的长度 \(100 + 2\log N\)

如果最开始的时候只将这 \(2\log N\) 个数递增地放在 \(A\) 的最开始,可以做到串长 \(4\log N\)

构造时间复杂度 \(\Theta(\log N)\)

posted @ 2023-05-15 13:29  dbxxx  阅读(22)  评论(1编辑  收藏  举报