日记

日记

Thu Jun 26 2025
4 分钟

神秘 jmr 模拟赛。

睡得十分香甜。

Jzzhu and Numbers Link to

我们考虑 dpidp_i 表示选出 dpidp_i 个数使得他们与起来是 ii 的超集。我们用 SOSdp 求解。

CPP
1
2
3
for (int i = 0; i < 20; i++)
    for (int s = 0; s < 1 << 20; s++)
        dp[s] = (dp[s] + dp[s | (1 << i)]) % mod

注意是先枚举 ii 再枚举 ss。那么答案就是 (1)popcount(i)×2dpi\sum (-1)^{\operatorname{popcount}(i)} \times 2^{dp_i}

GCD Counting Link to

对于一个 gg,我们不好直接算 gcd\gcd 恰好是 gg 的方案数,我们可以算 gcd\gcdgg 的倍数的方案数。我们记录下每个 ii 它的倍数有哪几个,然后拿并查集维护,如果两个都是 ii 的倍数且之间有边就 merge。然后看看每个点所属集合的 sizesize,将 size(size+1)2\frac{size(size + 1)}{2} 加到 fif_i 里。

但是这个是 gcd\gcdii 的倍数的情况。显然我们需要容斥。我们从大到小枚举 ii,并枚举 ii 的倍数 jj,将 fif_i 减掉 fjf_j 就是了。

但是这个沟槽的题目还要卡空间,只有 ff 能开 long long

逆序对 Link to

我们考虑每个位置的对逆序对数量的贡献。我们发现,第 ii 个位置,前面最多只有 i1i - 1 个比它大,设它的贡献是 aia_i,那么一定有 ai[0,i)a_i \in [0,i)。题意就变成了 i=1nai=k\sum_{i = 1}^{n}a_i = k,但是 ai[0,i)a_i \in [0,i)

我们发现 ai0a_i \ge 0 这个限制很好做,直接插板法。但是这个 ai<ia_i < i 很烦人。我们考虑钦定 iiaia_i 是不符合要求的,也就是说这些 ai=i+aia_i = i + a'_i。那些合法的就是 ai=aia_i = a'_i。那么原式就变成了 i=1nai=k一坨东西\sum_{i = 1}^{n}a'_i = k - \text{一坨东西}。显然,这 一坨东西\text{一坨东西} 就是不合法的数的 ii 之和,从柿子也可以看出,我们只关心 ii 的和。

考虑 dp。设 dpi,jdp_{i,j} 表示钦定有 ii 个不合法,那 一坨东西=j\text{一坨东西} = j。考虑转移:dpi,j=dpi1,ji+dpi,jidpi1,j(n+1)dp_{i,j} = dp_{i - 1,j - i} + dp_{i,j - i} - dp_{i - 1,j - (n + 1)}。分别表示加一项;不加一项,整体 +1+1;不合法的情况。

何谓“不合法”
我们 jj 表示那些不合法的 ii 之和。显然不会有 i>ni > n。而我们每次至多 +1+1,所以只用减 n+1n + 1

答案就是 i=0j=0k(1)i×dpi,j×(kj+n1kj)\sum_{i = 0}\sum_{j = 0}^{k}(-1)^i \times dp_{i,j} \times \binom{k - j + n - 1}{k - j},其中 (kj+n1kj)\binom{k - j + n - 1}{k - j} 表示把 kjk - j 分给 nn 个数的方案数。

后日谈 Link to 后日谈

我的水平已经和 4 年半前的草八牛一样了。