省选模拟75 题解

A. 比特币

考虑把第 $k$ 位为 $1$ 的问题放在模 $2^{k+1}$ 意义下考虑,这样问题就简单了。

因为若干个循环的贡献被强制放在了同一段上考虑。

然后随便弄个数据结构维护一下即可。

 

B. 测试

类似约数个数和一题,可以用类似的构造方法来展开 $d(i*j*k)$ 这个函数。

对于每个质因子 $p^c$,目的是用 $c_1+c_2+...+c_k$ 凑出 $(c+1)$ 来然后乘在总的系数里面。

对于 $k=2$ 的形式,可以直接枚举约数,然后用 $\gcd=1$。

对于 $k>2$ ,仍然是类似的,然后此时的要求是只有一个位置有值,其他位置均为 $1$。

其实也就是说任意两者的 $\gcd$ 均为 $1$。

所以对于 $k=3$,有三个布尔表达式。

直接用莫比乌斯反演展开这三个表达式。

然后化一化式子可以得到一个 $(i,j),(j,k),(i,k)$ 分别相关的式子。

然后到这里很神的做法是,把这种相关关系建图出来。

然后三者两两相关,其实就是构成一个三元环,所以做一下三元环计数即可。

 

C. 光图

连通块个数的 $k$ 次方的组合含义其实就是选中 $k$ 个可重的代表点,这个玩意并不容易计数。

考虑将 $x^k$ 通过第二类斯特林数展开为下降幂的形式,然后这个下降幂其实就是组合数乘阶乘。

阶乘可以提到外面去,然后现在的组合含义 $x$ 选 $k$ ,可以按照顺序来进行 dp,是容易计数的。

然后本题是一个连通块问题,首先处理出大小为 $i$ 的不同连通块个数。

因为若干个连通块可以随意组成一个任意图,所以设一设指数生成函数可以得到这个数组。

然后就可以得到一个暴力的 $dp$,因为有同层的转移的,这就需要分治做法,会多一个 $log$。

一个很套路的优化办法是,先只考虑不同层的转移。然后因为并不需要具体区分在哪一层转移的,所以直接给最终值乘一个系数即可得到答案。

posted @ 2020-04-20 22:12  skyh  阅读(142)  评论(0编辑  收藏  举报