temp

P4931 [MtOI2018] 情侣?给我烧了!
记答案为 \(t(n, k)\),那么有:
也就是说我们只需要求出 \(t(i, 0)\)。
注意到:
所以有:
即:
注意到这是一个卷积的形式,记 \(f_i = 2^i / i!\),\(g_i = t(i, 0)/{(i!)}^2\),\(h_i = (2i)!/{{(i!)}^2}\),记 \(F(x)\) 为 \(f\) 的 OGF,\(G(x)\) 为 \(g\) 的 OGF,\(H(x)\) 为 \(h\) 的 OGF。
注意到:
即:
对应到 OGF,有:
即:
解得:
注意到 \(F(x) = e^{2x}\),则:
那么有:
两边求导,有:
即:
即:
还原到 \(g\),有:
直接做即可。
CF1156E Special Segments of Permutation
考虑在笛卡尔树上做。
对于每个点,你会发现 \(l\) 是属于一个区间,\(r\) 是属于令一个区间的,那么我们只需要枚举短的那个区间即可。
时间复杂度是对的。
CF1355F Guess Divisors Count
神仙题,这是真人类智慧。
根据代数基本定理,我们将 \(X\) 分解为 \({p_1}^{a_1}{p_2}^{a_2}{p_3}^{a_3}\dots{p_k}^{a_k}\),那么答案为 \((a_1 + 1)(a_2 + 1)\dots(a_k + 1)\)。
先考虑如何用第二个条件。我们发现,\(X\) 的因数中最多包含 \(2\) 个大于 \(1000\) 的质数。那么如果我们分解出若干个小于 \(1000\) 的质数,再按上面的公式计算,设得到的答案为 \(t\),那么真实答案只能为 \(t,2t\) 或 \(4t\),利用第二个条件,猜测 \(2t\) 即可。也就是说,我们不需要考虑大于 \(1000\) 的质数,只需要考虑 \(1000\) 以内的质数。
现在,假设我们已经确定了 \(X\) 的这些质因数,如何求出幂次呢?首先,对于一个质因数 \(p\),我们可以通过询问 \(p^{\lfloor \log_{p}{{10}^9} \rfloor}\) 来得到 \(p\) 的幂次。又因为询问的数的上界是 \({10}^{18}\),而我们前面所说的数(即 \(p^{\lfloor \log_{p}{{10}^9} \rfloor}\))不超过 \({10}^9\),所以我们可以将两个质因数绑在一起询问。由于 \({10}^9\) 范围内一个数最多有 \(9\) 个质因数,所以这里我们最多需要询问 \(\lceil \frac{9}{2} \rceil = 5\) 次即可得到每个质因数的幂次,进而得到答案。
好的,现在问题变成了在 \(17\) 次询问内确定 \(X\) 的质因数。考虑将 \(1000\) 以内的质数分组,每组的乘积不能超过 \({10}^{18}\),且每组的质数应该尽量多。例如:\(2,3,5,7,\dots,47\) 可以分为一组。每次询问时,我们只需要询问一组的乘积就能判断这一组里哪些数是 \(X\) 的质因数。但是这样询问 \(17\) 次后我们最多确定到 \(661\),还剩一些质数,怎么办?这时候就需要利用第一个条件了。
设经过上面所有操作后得到的答案为 \(r\),对 \(r\) 进行分类讨论:
- \(r \leq 2\),此时 \(X\) 中大于 \(661\) 的质因数最多有 \(3\) 个。利用第一个条件,我们发现输出 \(x+7\) 是一定对的。
- \(r \geq 3\),此时 \(X\) 中大于 \(661\) 的质因数最多有 \(2\) 个,我们输出 \(2r\) 即可。
做完了,真可恶。

浙公网安备 33010602011771号