zoukankan      html  css  js  c++  java
  • 省选模拟101

    A. 石子游戏

      容易发现答案大约是log级别的,然后可以考虑一个暴力dp,记录当前一共选择了几个。

      发现dp的转移顺序并不是必要的,而重复的转移也一定不优,所以可以考虑将所有状态放到一起转移,然后就可以fwt来优化了。

      fwt的过程中不用每次都转化回去,直接用点值展开一项就可以判断有没有解。

    B. 函数

      是一种叫做powerful number的奇怪东西的模板题。

      定义就是所有质因子的幂次不小于2。然后令$f=g*h$,其中$g(x)=x^k$,那么由于$h=f/g$,所以h也是积性函数,展开f在质数处的取值可以的得到h在非power number处的取值一定为0。

      然后问题就是求出来h在所有powerful number处的取值,归纳可以得到$h(x)=x^k-x^{2k}$。

      由于符合条件的数的个数很少,所以暴力搜索出来然后对于每个都计算贡献就行了。

    C. 画

      假如不存在限制,那么找到所有数最高的二进制位,将所有数根据这一位为0或1分成两组。然后分情况讨论:

      1.若为1的一组这一位全部填1,那么向下递归。

      2.若为1的一组有任意一个数这一位不是1,那么其他数只要满足了最高位的限制,低位不管怎么填都可以由这个数调整。

      所以第一部分向下递归,第二部分暴力dp统计答案。

      考虑限制,就整个容斥,钦定不满足的边集统计贡献。由于边集很大,所以考虑钦定整个点集相同,然后计算边集的方案数进行容斥。边集的方案数可以通过减去不合法的得到。

      然后用dp将这些点集的连通块拼到一起即可。

      考虑这个dp,发现我们要计算贡献只需要知道大小为奇数的连通块的$limit$最小的点,所以将所有这样的点压到状态里。

      为了计数方便,我们钦定转移必须包含剩余集合中$limit$最小的点。然后暴力进行转移。复杂度看似很迷,实际上还是正确的。

  • 相关阅读:
    查找算法(I) 顺序查找 二分查找 索引查找
    快速排序 Quick Sort
    Activity生命周期
    Android中资源文件的使用
    排序算法
    插入排序(I)Insert Sort
    Java eclipse调试技巧什么的。。
    HTTP协议解析
    python技巧26[str+unicode+codecs]
    python类库26[PySide之helloworld]
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12926623.html
Copyright © 2011-2022 走看看