• 省选模拟30


    A.

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

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

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

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

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

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

      具体细节不是很会。

    B.

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

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

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

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

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

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

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

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

    C.

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

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

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

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

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

      于是问题就解决了。

  • 相关阅读:
    JAVA面向对象初步知识总结:封装、继承、多态
    最短路径算法
    Retrofit源码分析(一)
    属性动画总结(纯搬运郭霖先生的文章)
    多项式相关算法模板
    二分图匹配问题
    一般图匹配
    三种上下界网络流模板
    最大流模板
    2017-2018 Petrozavodsk Winter Training Camp, Saratov SU Contest
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12369154.html
Copyright © 2020-2023  润新知