
FWT
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
E-Exclusive OR 2020牛客多校第2场
https://ac.nowcoder.com/acm/contest/5667/E线性基可以求出任意取出一些数的最大值其实可以想到到了后面就会把线性基每一位填满了,因为数字大小只有2^18,那应该只有18位,那么做20次fwt算出答案就可以了满秩了后答案就是有规律的了,可以知道ans[i]=ans[i-2],因为可以选两个相同的抵消掉,还是最大值为什么不能ans[i]=ans[i-1]呢,因为会有 1 1 1 1 这种东西出现。。。#include<bits/stdc++.h&原创 2020-07-13 19:36:24 · 465 阅读 · 0 评论 -
BZOJ4589
由nim游戏的结论可知,就是n堆的数目的亦或和为0时,后手必胜。考虑昨天学的fwt,我们先预处理出有哪些所以对n进行快速幂。然而fwt有个性质,就是fwt2个数组以后,要求f()^n次幂,就是直接把fwt后的数组^n次幂,最后再ufwt回来,得到的答案就是^n幂次后的。不需要每次都对ans和tmp数组乘幂都fwt,ufwt一遍,复杂度会多个logT掉。考场上不知道这个性质,T到怀疑人生原创 2018-01-29 16:22:45 · 328 阅读 · 0 评论 -
UVALive 7065 2014北京区域赛H
本来是个水笔DP,40*1e6,不过我一直在往按位考虑的DP上想,当时也很困,然后队友一看,这不是FWT板题吗?就秒了= =这题刚好n=40,于是就均分成两半,先2^20*20预处理一蛤两边的数组的方案数,然后fwt乘一蛤,就能知道每个异或值有多少种方案数。#include<bits/stdc++.h>using namespace std;typedef long lo...原创 2018-09-27 10:57:44 · 202 阅读 · 0 评论 -
HDU5909 FWT
因为要求得是非空子树的异或和方案数,那么f[u][0...m-1]表示以u为根节点必取u这个节点的所有值的方案数,这里的子树表示的不是满子树,而是选择他的根节点和部分子树中的节点来异或。那么计算出u的子节点的f[v][0...m-1]后,我们对f[u][]和f[v][]跑一次fwt,就知道假如选择u这个连通块中的方案和v这个连通块中的方案异或可以得到多少新的方案。加到f[u][]中去,因为原来的就...原创 2019-01-22 15:45:45 · 193 阅读 · 0 评论 -
codeforces662C FWT
https://blog.youkuaiyun.com/V5ZSQ/article/details/79053445上面博客通俗易懂,转化巧妙#include<bits/stdc++.h>#define maxl 100010const int mod=1e9+7;using namespace std;int n,m,mini,rev;int ans[1<<...原创 2019-01-22 20:30:45 · 229 阅读 · 0 评论