Loading

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  阅读(40)  评论(1)    收藏  举报