【LOJ 6695】天气之子

找规律题的典范?
OEIS裸题 考场上让你用 OEIS 吗

题意

  link

题解

\(n\le 5\)

  打表

\(n\le 10^5\)

  发现不能直接求最优解,于是二分答案。
  验证答案时,先把前 \(2\) 个人放到 \(1,m\) 这两个位置,用一个堆维护每相邻两个位置的差值,每新来一个人时,取出最小的差值,均分成两半,各扔进堆。若取出的差值 \(\le 3\) 就判定答案不可行。
  然后考虑二分答案的上界 \(R\),不难发现 \(R\le 3n\),因为最终一定不可能存在大于 \(3\) 的差值,否则可以减小答案。
  时间复杂度 \(O(n\log_2 n)\)

\(n\le 10^{18}\)

  依然二分答案 \(m\),考虑优化判定。
  手算发现,差值最多只有 \(2\log m\) 种,同一种差值可以一起均分。
  故从大到小递推并累加每种差值的出现次数,若累加到 \(n\) 时扫到的差值 \(\le 1\) 就判定答案不可行。
  需要用一个堆维护已经出现的差值,每次取最大值。
  时间复杂度 \(O(\log_2^3 n)\)

\(n\le 10^{1000}\)

  以下是找规律题解,但做法可能和 loj 的题解不太一样,是 scb 大神犇猜的?(小声bb)
  我们发现把输入和输出交换一下,这似乎就是个简单 \(\text{dp}\) 题:设 \(f(i)\) 表示座位数为 \(i\),且第一个人坐在中间时最多能不相邻地坐下多少人,则有 $$f(i)=f(\lfloor \frac{i-3}{2}\rfloor)+f(i-3-\lfloor \frac{i-3}{2}\rfloor)+1$$
  即选取最中间的一个座位,那么它相邻的两个座位不能用了,剩下 \(i-3\) 个座位被平分成两半,每一半为一个后继状态。
  然后有 $$ans=f(i-4)+2$$
  即上面的 \(\text{dp}\) 转移是每次在一段座位的最中间放一个人,我们最后还要在两端放上一开始的两个人。
  题目是输入 \(ans\),输出 \(i\)。于是设 \(g\)\(f\) 的逆函数,因为 \(ans-2=f(i-4)\),所以 \(g(ans-2)=i-4\),即 \(g(ans-2)+4=i\)

  考虑如何快速求 \(g(n)\)\(n\in N+\))。
  把 \(g\) 函数打个表,好像没规律。
  但是把 \(g\) 函数的每相邻两项的差分值打个表,发现差分值依次为 $$1,3,1,5,1,1,1,9,1,1,1,1,1,1,1,17,1,1,\cdots$$
  我们发现这个序列就是在全 \(1\) 的序列上 把第 \(2^1\) 位加 \(2^1\),把第 \(2^2\) 位加 \(2^2\),把第 \(2^3\) 位加 \(2^3\)……
  由于这是 \(g\) 的差分序列,前 \(n\) 项的和就是 \(g(n)\)
  观察和的规律。第 \(1\) 个数为 \(2^0\),第 \(2-3\) 个数的和为 \(2^2\),第 \(4-7\) 个数的和为 \(2^3\),第 \(8-15\) 个数的和为 \(2^4\)……
  下标和数值都呈 \(2\) 的指数级增长。
  若把和看成一个二进制数,这个数不会超过 \(\log_2{10^{1000}}≈3000\) 位。
  由于最后一段是不完整的,我们单提出最后一段求和,再对前面 \(\log_2\) 个整段求和。

  求最后一段前 \(k\) 个数的和:发现该段第一个数就是上一段的总和 \(+1\),后面的数全是 \(1\),故递推时算一下当前扫到的段的和,从上一段的和加上 \(k\)\(1\) 就是最后一段前 \(k\) 个数的和。然后计算 \(k\) 需要做一次高精度减法,上一段的和加 \(k\) 又需要做一次高精度加法,故时间复杂度是 \(O(3000)\)
  求前面所有完整段的和:设总共有 \(k\) 段,则答案为 \(2^0+2^2+2^3+\cdots +2^k = 2^{k+1} - 1 - 2^1 = 2^{k+1} - 3\)。只需要做一次高精度减法,时间复杂度也是 \(O(3000)\)

  最后要把 \(3000\) 位二进制数转十进制,这个就是从高到低每扫过一个二进制位时,把十进制数 \(\times 2\),若这个二进制位为 \(1\) 则十进制数还要 \(+1\)
  只有最后的进制转化的时间复杂度最高,是 \(O(\log_2^2 n) ≈ 9\times 10^6\)。这部分据说可以 \(\text{FFT}\) 优化?不会,告辞。
  所以这都是经典数学问题嘛?规律这么神奇的

posted @ 2019-09-12 21:58  大本营  阅读(342)  评论(0编辑  收藏  举报