省选模拟30

A.

  由于答案是三次方级别的,所以不难想到枚举三位考虑这三位上的贡献。

  这个东西可以用bitset简单优化,复杂度可以做到$nk^3/w$。

  假如k非常大,那么考虑暴力枚举每个点对贡献。这个过程可以通过压位来实现,复杂度$n^2k/w$。

  将这两个合在一起就有80分了。

  发现第一部分的复杂度太高,考虑优化。

  考虑当k非常小的时候,可以直接fwt求出来每种异或结果的方案数。考虑我们只需要其中的三位,那么可以将所有位分成若干组,枚举三组统计答案即可。

  具体细节不是很会。

B.

  首先不难将这个式子化成$\sum\limits_{i=1}^{n}\mu(i)\sum\limits_{j=1}^n [gcd(i,j)==1] \mu(j)$的形式。

  然后题解的做法是设一个阈值B,那么对于$i \in [1,B]$暴力统计答案。

  对于剩余的部分,枚举点对造成贡献。

  那么剩下的问题是求出来$f(x,y)=\sum\limits_{i=1}^x [gcd(i,y)==1] \mu(i)$。

  假如$y=1$,那么直接杜教筛就可以计算。

  其余的部分,可以考虑$f(x,y)=\sum\limits_{d|y} f(x,d)$。

  然后直接暴力递归就行了。然而还是会死。

  这个形式好像很像杜教筛,所以我们可以预处理出来一部分的f,然后进行暴力递归就行了。

C.

  对于排列,假如将$i$和$p_i$连边,那么最终将出现若干个环。假如我们已经知道了图的形态,那么只要给每个环定向就行了。

  所以要求出来所有有用的边。

  假如当前确定了一个集合的边,满足这个集合中的边互不相交,要求出来这个集合中的有用的边,直接分治就可以了。

  那么现在的问题是,将所有边拆分成较少的集合数,满足每个集合中的边都互不相交。

  这是个构造题,一种很帅的构造方法是对于第x轮,将$i+j \equiv x \pmod {n-1}$的所有$(i,j)$选入一个集合。$n-1$与没有匹配的那条边匹配

  于是问题就解决了。

猜你喜欢

转载自www.cnblogs.com/hzoi-cbx/p/12369154.html