QOJ 1289 A + B Problem

题目描述

  • 有一个长度为 \(n+m\)\(01\)\(S\)
  • \(F(S)=\sum_{i=1}^{|S|}2^{|S|-i}S_i\) 就是 \(01\) 串的二进制值
  • \(S\) 划分成两个长度分别为 \(n,m\) 的子序列 \(A,B\),使得 \(F(A)+F(B)\) 最大
  • \(|S|\le 10^6\)

题解

  • 首先不失一般性令 \(n\ge m\)
  • 性质1:设我们把 \(S\) 的一段前缀划分给 \(A\)\(B\),那么 \(A\) 的剩余位置 \(\ge\) \(B\) 的剩余位置
  • 性质2:在 \(B\) 还有剩余位置的时候,\(A\) 不可能填 \(0\).
  • 这都显然正确.
  • 那么我们考虑一个 \(B\) 结尾的位置 \(i\)
  • \(A=\) \(i-m\)\(1\) \(+[i+1,n+m]\)
  • \(B=\) \([1,i]\) 中去除靠后的 \(i-m\)\(1\)
  • 考虑一次 \(i+1\) 的变化,若是 \(1\)\(F(A),F(B)\) 没有影响,若是 \(0\) 相当于 \(F(B)-2^x\),\(F(A)+2^y\)\(x\)递增,\(y\) 递减。平衡一下的那个 \(i\) 就是答案.
posted @ 2025-02-14 07:29  LUHCUH  阅读(58)  评论(1)    收藏  举报