10.11 NOIP模拟赛
T1 sosoo
这种题应该上来就先打表找找规律而不是硬想。
打表可找到规律最多 30 次之后一定是取 \((2b - i, 2a - i)\)。
之后就可以利用矩乘的思想推出之后的答案。具体的,对于 \(n - 30\) 为奇数的情况,此时的 \(a\) 应是由 \(b'\)(30 次时的 \(b\))算出,\(b\) 同理;为偶数则反之。注意 \(n\) 较大要取模,指数取模是模 \(mod - 1\)。
T2 splay
不会移项我在干嘛。
其实不用正难则反也能做,就是统计答案的思路比较复杂(?
所以考虑正难则反,条件转换成 \(\min\limits_{\forall i<j, a_j \neq 0}{a_i \geq ka_j}\)。全集是 \((m + 1)^n\),用它减去逆命题的答案即可。考虑分成两种情况讨论:
-
\(k = 1\)
那么原序列即为单调不增,我们要求的就是 \(\forall a_i \in [0,M]\) 构成单调不增序列的方案数,此时答案为 \((m+1)^n - \binom{n+m}{m}\)。
-
\(k > 1\)
考虑 dp,记 \(f_{i,j}\) 表示当前填到第 \(i\) 位,这一位填 \(j\) 的答案。根据推导可知转移为 \(f_{i,j} \to f_{i+1,\lfloor\frac{j}{k}\rfloor} \sim f_{i+1,0}\)。即若要从 \(f_{i-1,x} \to f_{i,j}\) 则需满足 \(x \geq j \times k\)。显然第一维可以滚动数组优化。答案为 \((m+1)^n - f_{n\bmod 2,\lfloor\frac{m}{k}\rfloor}\)。
T3 sosqrt
好题。妙。
先把题目分析透彻再说怎么做的事。
你注意到直接通过题意反推 \(f(n)^2 \times g(n) = N\)。根据 \(f(n),g(n)\) 的定义只要我们知道了 \(N!\) 和 \(F\) 就可以算 \(G\) 了。(为什么选择去推 \(F\) 是因为式子会更简单一点)
考虑每个质因子,记 \(\varphi_p(x)\) 表示 \(p^{t} \mid x\) 的最大的 \(t\)。那么可得 \(F = \prod\limits_{p \in P}{p^{\sum\limits_{i=1}^{n}{\lfloor\frac{\varphi_p(i)}{2}\rfloor}}}\)。
同时可以发现 \(\varphi_p(x) \geq 2,p^2 \leq N\) 才可能对答案有贡献。那么最后可以简化成 \(F = \prod\limits_{p \in P, p \leq \sqrt{N}}{p^{\sum\limits_{t\geq 1}{\lfloor\frac{N}{p^{2t}}\rfloor}}}\)。
那么整体的瓶颈就在求 \(N!\),由于 \(N \leq 10^9\) 可以考虑分块打表。设块长为 \(B\),则每次询问都 \(O(B)\) 求出 \(N!\)。打表算出 \(B!,(2B)!,(3B)!,\dots\),块长取 \(B = 10^5\) 刚好代码长度在 100KB 内。

浙公网安备 33010602011771号