ARC066 简要题解

ARC066 简要题解

A

直接模拟即可

B

首先容易得到 (a + b geq a xor b)

(f[i][j]) 代表考虑了二进制下 (a, b) 的前 (i) 位, (a + b leq j) 的方案数

那么考虑这样一个事情, 考虑第 (i) 位怎么算, 设前 (i - 1) 位的和为 (j')

一种是 (a, b) 的第 (i) 位均为 (1) , 那么有 (2j' + 2 leq j)

要么只有一个为 (1) , 那么有 (2 j' + 1 leq j)

要么全为 (0) , 那么有 (2j' leq j)

所以有 (f[i][j] = f[i - 1][frac{j}{2}] + f[i - 1][frac{(j - 2)}{2}] + f[i - 1][frac{j - 1}{2}])

除号均为下取整, 这样其实是 (O(log N))

C

加号后的一个括号没用, 减号后的一个括号会把括号中的符号全部变号

然后会发现两个以上的括号嵌套是没用的, 所以括号的嵌套最多只有两个

这样就好算了, 设 (f[i][0 / 1 / 2]) 为前 (i) 个数, 前面还有 (0 / 1 / 2) 个左括号没有匹配, 转移方程比较简单

D

太长了, 懒得更, 洛谷上的题解讲得挺好的

Link

原文地址:https://www.cnblogs.com/ztlztl/p/13687159.html