昨天考试由于不会fwt而爆炸,所以今天搞了一下fwt……话说这玩意的普及程度已经很高了.
fwt,快速沃尔什变换,可以用于位运算卷积的优化,是一种线性变换,所以就会有许多好的性质(eg:可以直接模,可以修改运算等). & | ^ 的变换定义与方法是基础,在此基础上的扩展与运用是重要的地方.
HZOI #1572.宇宙序列
  notes:

这就是造成我考试爆炸的考试题,见Contest Record

UOJ #310.【UNR #2】黎明前的巧克力
  notes:

感觉比较灵活的一道题.首先写出裸dp,之后会发现答案就是许多数组连续进行fwt,这个时候经过观察会发现,每个数组变换后每个位置上不是-1就是3这个时候我们可以对于每一位进行单独考虑,去算与这一位&之后有奇数位的数的个数,以及与这一位&之后有偶数位的数的个数,我们可以用fwt计算这个,然后计算每一位的最后答案,最后再ifwt回去.
思想:
  I.感觉在fwt里利用对应位相乘所导致的每一位互相独立是许多fwt题目中解题的关键.
  II.在这个题目中观察性质从而改变问题的思路很巧妙啊.

UOJ #267.【清华集训2016】魔法小程序
  notes:

就是对于|运算fwt的扩展,看懂题意之后其实就是个加工板子的过程.不过,感觉那个数据范围给的好迷啊,为什么int就可以呢……不会证明……

UOJ #300.【CTSC2017】吉夫特
  notes:

题目比较傻逼,首先可以写出n^2裸dp来,然后用Lucas定理可以证明出,一个组合数为奇数的充要条件,然后就可以枚举子集来dp了,是O(3^18).
实际上这题可以做得更加优秀.
首先这题可以进行序列上的分块,做到O(2^27).
然后这道题还可以用二进制分块来动态维护&运算fwt数组,从而做到O(6^9).
思想:用Lucas定理来进行组合数相关的证明(我反正是没想到这玩意)、分块思想(序列分块、二进制分块).
技巧:枚举子集是i=(i-1)&x,枚举父集是i=(i+1)|x.

UOJ #348.【WC2018】州区划分
  notes:

先写出O(3^n)的傻逼dp,然后开始优化.
发现转移是子集卷积的形式,于是考虑进行子集卷积,然后这题就完事了.
子集卷积:
  f(i)=sigma [j|k=i,j&k=0] g(j)*h(k);
  转化为f(c,i)=sigma [j|k=i,|j|+|k|=c] g(j)*h(k)
  这个时候我们原来的子集卷积,就变为了二维卷积(也就是加法卷积套|运算卷积),显然第一维卷积可以直接计算,第二维卷积fwt就可以了,于是子集卷积的复杂度从O(3^n)优化到了O(n^2*2^n).

Notes of fwt的更多相关文章

  1. ASP.NET Core 1.1.0 Release Notes

    ASP.NET Core 1.1.0 Release Notes We are pleased to announce the release of ASP.NET Core 1.1.0! Antif ...

  2. Android Weekly Notes Issue #237

    Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...

  3. Android Weekly Notes Issue #230

    Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...

  4. Android Weekly Notes Issue #229

    Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...

  5. Android Weekly Notes Issue #227

    Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...

  6. Android Weekly Notes Issue #221

    Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...

  7. Android Weekly Notes Issue #219

    Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...

  8. FWT与High dick(划掉改成Dimensional) Fourier Transform

    我们大家都知道xor卷积有个很好的做法:FWT.FWT的变换形式是很好看的 // 说明一下Vector可以向量化运算,也可以当做数组来slice与concat Vector tf(A,2^n){ Ve ...

  9. Codeforces663E Binary Table(FWT)

    题目 Source http://codeforces.com/contest/663/problem/E Description You are given a table consisting o ...

随机推荐

  1. RabbitMQ入门:在Spring Boot 应用中整合RabbitMQ

    在上一篇随笔中我们认识并安装了RabbitMQ,接下来我们来看下怎么在Spring Boot 应用中整合RabbitMQ. 先给出最终目录结构: 搭建步骤如下: 新建maven工程amqp 修改pom ...

  2. 智慧树mooc自动刷课代码

    最近学习javaScript和JQuery,恰好还有一门mooc没有看.结合学习的知识和其他人的代码:撸了一个自动播放课程的代码,同时自动跳过单章的测试题. 用电脑挂着不动就完事了. 如下: var ...

  3. leetcode个人题解——#33 Search in Rotated Sorted Array

    思路:每次取中间元素,一定有一半有序,另一半部分有序,有序的部分进行二分查找,部分有序的部分递归继续处理. class Solution { public: ; int middleSearch(in ...

  4. Qt中容器类应该如何存储对象

    Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...

  5. Hibernate入门篇<1>hibernate.cfg.xml学习小结

    Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性,这个配置文件应该位于应用程序或Web程序的类文件夹 classes中.Hibernate配置文件支持两种形式, ...

  6. Jquery获取属性值

    jq获取某个标签内的属性值:$("#TeamPerformanceYearUl li:eq(0)").attr('data') jq获取li或者td第一个属性(索引值从零开始)$( ...

  7. 初学Objective - C语法之代码块(block)

    一.block声明 1.无参数,无返回值: void (^sayHi)(); 2.有参数,有返回值: NSInteger (^operateOfValue)(NSInteger num); block ...

  8. 【转】Linux C 网络编程——TCP套接口编程

    地址:http://blog.csdn.net/matrix_laboratory/article/details/13669211 2. socket() <span style=" ...

  9. WordPress使用淘宝IP地址库的API显示评论者的位置信息(二)

    1 淘宝IP地址库的接口说明 在上一篇文章<WordPress使用淘宝IP地址库的API显示评论者的位置信息(一)>中,vfhky使用了新浪工具提供的这个IP接口显示博客评论者的位置信息. ...

  10. C#使用 SharpSSH

    准备试一把监控Linux机器 . 附件如下 :http://files.cnblogs.com/files/lclblog/Tamir.SharpSsh.zip