CSP-2024 第一次

A

分解 \(a\) 之后可以轻松找到最小的 \(b\) 满足 \((a,b)\) 是好的,而其他的 \(b\) 一定是最小的 \(b\) 的完全平方数倍。

B

暴 力 大 战(为啥 \(d^3(m)\) 甚至 \(d^4(m)\) 能轻松过 1e9 啊,赛时以为 \(d(m)=\Theta(\sqrt m)\)\(d^3(m)=\Theta(m\sqrt m)\) 就没敢写,只写了 \(O(m\log m)\) 的暴力

首先 \(\gcd\) 肯定是 \(\text{lcm}\) 的约数,所以 \(\gcd\) 肯定是 \(m\) 的约数,可以先 \(O(d(m))\) 枚举 \(\gcd=k\),同时也可以知道 \(\text{lcm}=m-k\)

\(S\) 中的所有数同时除以 \(k\),则转化为求 \(\gcd=1,\text{lcm}=\dfrac{m-k}k\)\(S\) 的个数,设它是 \(f\left(\dfrac{m-k}k\right)\)

再设 \(\gcd=1,\text{lcm}\mid k\)\(S\) 的个数为 \(g(k)\),则 \(g(k)=\sum\limits_{i\mid k}f(i)\),莫反得到 \(f(k)=\sum\limits_{i\mid k}g(i)\mu\left(\dfrac ki\right)\),现在只需要求 \(g\)

\[\begin{aligned} g(k)=&\sum\limits_{\forall i\in S,i\mid k}[\gcd\limits_{i\in S}i=1]\\ =&\sum\limits_{d\mid k}\mu(d)\sum\limits_{\forall i\in S,i\mid k}[\forall i\in S,d\mid i] \end{aligned} \]

观察后面的条件 \(\forall i\in S,d\mid i\mid k\),把 \(S\) 中的所有数同时除以 \(d\),可得

\[\begin{aligned} =&\sum\limits_{d\mid k}\mu(d)\sum\limits_{S}[\forall i\in S,i\mid\dfrac kd]\\ =&\sum\limits_{d\mid k}\mu(d){\sigma_0\left(\dfrac kd\right)\choose n} \end{aligned} \]

\(h(k)={\sigma_0(k)\choose n}\),则 \(g=\mu*h\)\(f=\mu*\mu*h\)\(\mu*\mu\) 是积性函数,不用卷直接算,剩下的直接暴力卷即可做到 \(O(d^3(m))\)

C

肯定是要算出两半的方案数再乘起来,这里只考虑前一半,设 \(f_i\) 表示以数 \(i\) 结尾的子序列个数,则 \(O(n2^m)\) 的暴力是显然的,考虑优化转移。

考虑根号平衡,设 \(p_{i,j}\) 表示已经求出的所有状态中,前 \(\dfrac m2\) 位为 \(i\),后 \(\dfrac m2\)\(\subseteq j\) 的状态的值之和,

填入一个前 \(\dfrac m2\) 位为 \(x\),后 \(\dfrac m2\) 位为 \(y\) 的数 \(v\) 时,只需枚举 \(x\) 的所有子集 \(i\),累加 \(p_{i,y}\) 转移到 \(f_v\) 即可。

考虑 \(f_v\) 加上 \(\Delta\) 时对 \(p\) 的影响,只需枚举 \(y\) 的所有超集 \(j\),把 \(p_{x,j}\) 加上 \(\Delta\) 即可。总复杂度 \(O(n2^{\frac m2})\)

D

根据 \(q\)-analog 理论,答案是 \(\displaystyle{n+m\brack n}_q\)

然后 \(q\)-Lucas 定理有一个推论:

\[\displaystyle{n\brack m}_q\equiv{\left\lfloor\dfrac n{\text{ord}_p(q)}\right\rfloor\choose\left\lfloor\dfrac m{\text{ord}_p(q)}\right\rfloor}{n\mod\text{ord}_p(q)\brack m\mod\text{ord}_p(q)}_q\pmod p \]

左边 Lucas,右边暴算即可。

posted @ 2024-09-06 19:42  5k_sync_closer  阅读(230)  评论(6编辑  收藏  举报