zoukankan      html  css  js  c++  java
  • 省选模拟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$与没有匹配的那条边匹配

      于是问题就解决了。

  • 相关阅读:
    Python列表去重
    hash表长度优化证明
    DDD初学指南
    继承和实现的明显区别
    微信商户支付
    centos7+mono4+jexus5.6.2安装过程中的遇到的问题
    SVN:重命名文件之后不允许提交
    SpringMVC 自定义全局日期转换器
    解决Cannot change version of project facet Dynamic web module to 2.5
    Maven项目热部署到Tomcat容器下
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12369154.html
Copyright © 2011-2022 走看看