G
这个问题不好直接做,考虑转化为一个好求的问题。
原问题等价于求最小的 (x) 使得(或判断无解):
[egin{aligned}
frac{2}{9}(10 ^ x - 1) &equiv 0 pmod{k} \
2(10 ^ x - 1) &equiv 0 pmod{9k} \
10 ^ x &equiv 1 pmod{frac{9k}{gcd(k, 2)}}
end{aligned}
]
令 (p = frac{9k}{gcd(k, 2)}),当 (gcd(10, p)
e 1) 时原问题显然无解。
否则等价于求 (10) 在模 (p) 意义下的阶,一定有 (ord_{p} 10 mid varphi(p)),求出 (varphi(p)) 后暴力枚举约数即可,复杂度 (mathcal{O}(Tsqrt{n} log n))。
H
考虑如何判定一颗二叉树是合法的,有如下观察:
- 每个位置上为 (1) 的数(除了根)必须要向上移动。
因此原问题中的移动次数 (n - 1) 其实是这个移动问题最优情况的答案下界,考虑何时满足这种情况:
- 根节点上数字为 (1)。
- 若一个节点上为 (1) 那么它的 (2) 级祖先必有至少一个节点上为 (1)。
考虑 (
m dp),令 (f_i, g_i) 分别表示 (i) 个点,根节点填的数字为 (0/1) 的合法方案,枚举左右子树大小转移:
[f_i = sumlimits_{j < i} (f_j + g_j) imes (f_{i - j - 1} + g_{i - j - 1})
]
[g_i = sumlimits_{j le i} f_j imes f_{i - j}
]
边界我们考虑人为构造成 (f_0 = 1, g_0 = 0)。
注意到转移是卷积的形式,于是我们构造两个关于 (f, g) 的 (mathrm{OGF}:F(x), G(x)),于是有:
[egin{aligned}
& F(x) = x(F(x) + G(x)) ^ 2 + 1, G(x) = F ^ 2(x) - 1 \
&Longleftrightarrow F(x) = x(F ^ 2(x) + F(x) - 1) ^ 2 + 1
end{aligned}
]
将两边展开后为四次方程,很难求根展开,考虑换一个方式求解通项公式。
注意到 (x) 出现仅出现一次且为一次式,不妨借助拉格朗日反演,考虑如此构造求出 (F(x)) 的复合逆 (G(x)):
[egin{aligned}
& G(F(x)) = x = frac{F(x) - 1}{(F ^ 2(x) + F(x) - 1) ^ 2} \
&Longleftrightarrow G(x) = frac{x - 1}{(x ^ 2 + x - 1) ^ 2}
end{aligned}
]
应用拉格朗日反演公式,有:
[egin{aligned}
[x ^ n]F(x) &= frac{1}{n}[x ^ {n - 1}]left(frac{x}{G(x)}
ight) ^ n \
&= frac{1}{n}[x ^ {n - 1}]left(frac{x(x ^ 2 + x - 1) ^ 2}{x - 1}
ight) ^ n
end{aligned}
]
注意到后半部分分母部分不好处理,发现问题来源在于 (G(x)) 分子为 (x - 1) 与 (frac{x}{G(x)}) 没有抵消,于是考虑换元:
[H(x) = F(x) - 1 = x((H(x) + 1) ^ 2 + H(x)) ^ 2
]
可以用同样的方法构造出 (H(x)) 的复合逆 (G(x) = frac{x}{((x + 1) ^ 2 + x) ^ 2} = frac{x}{(x ^ 2 + 3x + 1) ^ 2}),此时应用拉格朗日反演公式:
[egin{aligned}
[x ^ n]F(x) &= frac{1}{n}[x ^ {n - 1}]left(frac{x}{G(x)}
ight) ^ n \
&= frac{1}{n}[x ^ {n - 1}]left(x ^ 2 + 3x + 1
ight) ^ {2n} \
&= frac{1}{n} sumlimits_i ^ {lfloor frac{n - 1}{2}
floor} dbinom{2n}{i ~~~ n - 2i - 1 ~~~ n + i + 1}3 ^ {n - 2i - 1}\
end{aligned}
]
直接计算即可,复杂度 (mathcal{O}(n))。