题目描述 给出 $n$ 个数,从中选出两个互不相交的集合,使得第一个集合与第二个集合内的数的异或和相等.求总方案数. 输入 第一行一个正整数 $n$ ,表示巧克力的个数.第二行 $n$ 个整数 $a_i$ 表示每个巧克力的美味值. 输出 输出一行一个整数,表示能使得他们心情契合的吃巧克力的方案数对 998244353 取模的结果. 样例输入 61 2 3 4 5 6 样例输出 80 题解 FWT 首先如果两个集合的异或相等,那么它们的异或为0.原问题转化为求选出一个异或和为0的集合并分为两个即可…
uoj description 给你\(n\)个数,求从中选出两个交集为空的非空集合异或和相等的方案数模\(998244353\). sol 其实也就是选出一个集合满足异或和为\(0\),然后把它分成两半. 利用生成函数那套理论,就是对于每个\(a_i\),构造一个多项式\(b_i\),其中\(b_0=1,b_{a_i}=2\),然后把这\(n\)个\(b\)做集合异或卷积.这样我们就得到了一个优秀的\(O(na_i\log a_i)\)的做法辣(雾). 我们考虑一下\(b_0=1,b_{a_i…
uoj310[UNR #2]黎明前的巧克力(FWT) uoj 题解时间 对非零项极少的FWT的优化. 首先有个十分好想的DP: $ f[i][j] $ 表示考虑了前 $ i $ 个且异或和为 $ j $ 的方案数, 有 $ f[i][j]= f[i-1][j] + 2 * f[i-1][j \oplus a[i]] $ . 可以考虑FWT,但很明显时间复杂度没有优化. 但另一方面,每层的卷积卷的都是 $ 1,0,0,...,2,0,0,... $ 的形式, 这样一来卷之后每项都是 $ -1 $…
LINK:黎明前的巧克力 我发现 很多难的FWT的题 都和方程有关. 上次那个西行寺无余涅槃 也是各种解方程...(不过这个题至今还未理解. 考虑dp 容易想到f[i][j][k]表示 第一个人得到巧克力的状态为j 第二个人为k的方案数. 期望得分0. 观察状态转移和最终的目标状态 可以将状态降维 变成f[i][j]表示两个人异或的结果为j的方案数. 这样复杂度是\(n\cdot W\)的 其中W为值域. 观察转移 可以发现是一个异或卷积的形式 所以复杂度就变成了\(m\cdot W\cdot…
UOJ 思路 显然可以转化一下,变成统计异或起来等于0的集合个数,这样一个集合的贡献是\(2^{|S|}\). 考虑朴素的\(dp_{i,j}\)表示前\(i\)个数凑出了\(j\)的方案数,发现这其实就是一堆多项式用异或卷积搞起来.第\(i\)个多项式是\(1+2x^{a_i}\). 对\(1+2x^{a}\)FWT一下,发现结果就只有-1和3.为什么?根据FWT的理论,\(a_i\)会对\(FWT(a)_j\)产生\(a_i\times (-1)^{\text{bitcnt}[i\&j]}\…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ310.html 题目传送门 - UOJ#310 题意 给定 $n$ 个数 ,请你选出两个不相交的集合(两个集合交换一下也算一种),问有多少种选择方案使得两个集合各自包含的数的异或值 相等. 不能两个都不选. $n,a_i\leq 10^6$ 题解 首先,问题可以转化成:选择两个集合,他们的异或值为 $0$ . 我们可以构造幂级数. 对于 $a_i$ 我们构造: $h_i(x)=x^0+2x^{a_i}$…
题意 题目链接 Sol 挂一个讲的看起来比较好的链接 然鹅我最后一步还是没看懂qwq.. 坐等SovietPower大佬发博客 #include<bits/stdc++.h> using namespace std; const int MAXN = (1 << 23) + 10, mod = 998244353, inv2 = (mod + 1) / 2, inv4 = 748683265, lim = 1048576; inline int read() { char c =…
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 很奇妙的一道题 首先不难发现一个暴力做法,就是f[i]表示异或和为i的答案数,每次FWT上一个F数组,其中F[0]=1,F[ai]=2,最后输出f[0]即可. 这样我就考虑从FWT之后的数组入手. 首先发现F[0]=1只会让最后的数组全部+1,所以只考虑F[ai]=2的影响. 发现每个项只会是3或者-1,这取决于FWT过程中的取反次数. 所以可以设计一个dp,f[i][x]表示分治到第i层,x是2的方案数,F[i][x]表示...…
题目传送门 题目大意:给你一个序列,定义一个子序列的权值表示子序列中元素的异或和,现在让你选出两个互不相交的子序列,求选出的这两个子序列权值相等的方案数,$n,a_{i}\leq 10^{6}$ 这是一道考察对$FWT$算法理解的好题.然而我并不会 思路来自出题人的题解 假设权值最大值为$m$ 暴力怎么搞?背包$DP$一下 定义$f(i,j)$表示现在遍历到了第$i$个元素,选出的两个子序列异或和为$j$的方案数,容易得到方程: $f(i,j)=f(i-1,j)+2*f(i-1,j\;xor\;…
[uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) FWT之后,一定只有-1,3 而FWT的和等于和的FWT 所以做和,然后FWT一下 列方程就可以得到每一位的-1和3的个数了 而对于一些多项式,分别FWT.IFWT和FWT后乘起来再IFWT是一样的 我们已经快速幂得到n个多项式FWT的乘积了 再做一次IFWT即可 还是想到FWT集体处理,必然要注意顺…