昨天考试由于不会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. Linux 安装FastDFS<准备>(使用Mac远程访问)

    阅读本文需要一定的Linux基础 一 FastDFS简介 fastdfs是用c语言编写的一款开源分布式文件系统, fastdfs为互联网量身定制, 充分考虑了冗余备份, 负载均衡, 线性扩容等机制, ...

  2. 初试Gevent – 高性能的Python并发框架

    Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效. 于greenlet.eventlet相比,性能 ...

  3. eclipse技巧-快捷键

    ctrl + 1,快速修复 ctrl + d, 快捷删除行 shift + Enter,快速移动光标到下一行 ctrl + F11,运行代码 alt + ↑/↓,快速移动行 ctrl + alt + ...

  4. “Hello World!”团队第十四次会议

    今天是我们团队“Hello World!”团队召开的第十四次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.Todo List 六.会议照片 七.燃尽图 一.会议时间 2 ...

  5. 《JavaScript》JS中的跨域问题

    参考博客:https://www.cnblogs.com/yongshaoye/p/7423881.html

  6. 第二次程序+PSP0级

    第二周,老师接着上次的程序有对四则运算的程序,做出来一些要求,这次要求可以控制乘除法,有无括号,控制输出方式,控制结果有无负数,有无余数. 我在对原先的程序分析了一下,发现我原先的程序可扩展性特别差, ...

  7. HDU 5200 Trees 二分

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5200 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  8. C#高级编程 (第六版) 学习 第二章:C#基础

    第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...

  9. 【第二周】Java实现英语文章词频统计

    1.需求:对于给定的英文文章进行单词频率的统计 2.分析: (1)建立一个如下图所示的数据库表word_frequency用来存放单词和其对应数量 (2)Scanner输入要查询的英文文章存入Stri ...

  10. adb命令模拟按键事件KeyCode

    例子: //这条命令相当于按了设备的Backkey键 adb shell input keyevent 4 //可以解锁屏幕 adb shell input keyevent  82 //在屏幕上做划 ...