UOJ #310 黎明前的巧克力 (FWT)】的更多相关文章

LINK:黎明前的巧克力 我发现 很多难的FWT的题 都和方程有关. 上次那个西行寺无余涅槃 也是各种解方程...(不过这个题至今还未理解. 考虑dp 容易想到f[i][j][k]表示 第一个人得到巧克力的状态为j 第二个人为k的方案数. 期望得分0. 观察状态转移和最终的目标状态 可以将状态降维 变成f[i][j]表示两个人异或的结果为j的方案数. 这样复杂度是\(n\cdot W\)的 其中W为值域. 观察转移 可以发现是一个异或卷积的形式 所以复杂度就变成了\(m\cdot W\cdot…
题目传送门 题目大意:给你一个序列,定义一个子序列的权值表示子序列中元素的异或和,现在让你选出两个互不相交的子序列,求选出的这两个子序列权值相等的方案数,$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\;…
[题目链接] http://uoj.ac/problem/310 [题目大意] 给出一个数集,A从中选择一些数,B从中选择一些数,不能同时不选 要求两者选择的数异或和为0,问方案数 [题解] 题目等价于选取一个非空且xor为0的集合并将其拆分为两个子集的方案数 用dp表示xor为j的方案数,易得dp方程dp[i][j]=dp[i-1][j]+2*dp[i-1][j^a[i]] 该式等价于dp数组与只有两个元素有值的g[0]=1,g[a[i]]=2的数组做卷积运算 对g数组进行反演可以发现每次卷积…
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 $…
原文链接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}$…
题目描述 给出 $n$ 个数,从中选出两个互不相交的集合,使得第一个集合与第二个集合内的数的异或和相等.求总方案数. 输入 第一行一个正整数 $n$ ,表示巧克力的个数.第二行 $n$ 个整数 $a_i$ 表示每个巧克力的美味值. 输出 输出一行一个整数,表示能使得他们心情契合的吃巧克力的方案数对 998244353 取模的结果. 样例输入 61 2 3 4 5 6 样例输出 80 题解 FWT 首先如果两个集合的异或相等,那么它们的异或为0.原问题转化为求选出一个异或和为0的集合并分为两个即可…
题意 题目链接 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 =…
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]}\…
[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集体处理,必然要注意顺…
[UOJ#310][UNR#2]黎明前的巧克力(FWT) 题面 UOJ 题解 把问题转化一下,变成有多少个异或和为\(0\)的集合,然后这个集合任意拆分就是答案,所以对于一个大小为\(s\)的集合,其贡献是\(2^s\). 于是我们可以弄出若干个\((1+2x^{a_i})\)这样子的多项式,然后异或卷积把它们卷起来就是答案. 根据\(FWT\)异或卷积的理论,如果\(i\)位置有一个\(1\),那么\(FWT\)之后对于\(j\)位置的贡献是\(-1^{pop\_count(i\&j)}\).…
「UNR#2」黎明前的巧克力 解题思路 考虑一个子集 \(S\) 的异或和如果为 \(0\) 那么贡献为 \(2^{|S|}\) ,不难列出生产函数的式子,这里的卷积是异或卷积. \[ [x^0]\prod_{i=1}^{n} (2x^{a_i}+1) \] 因为每一项只有两项 \(x^0,x^{a_i}\) 有值,记 \(f_i(x) =2x^{a_i}+1\), \(f'_i(x)=\text{Fwt}f(x)\) ,有 \[ f_i'(x)=\sum_{S} (1+2\times(-1)^…
[UNR #2]黎明前的巧克力 首先可以发现,等价于求 xor 和为 \(0\) 的集合个数,每个集合的划分方案数为 \(2^{|S|}\) ,其中 \(|S|\) 为集合的大小 然后可以得到一个朴素 dp ,令 \(dp_{i,j}\) 代表前 \(i\) 个数字 xor 和为 \(j\) 的集合个数 显然转移为 \[ dp_{i,j}=dp_{i-1,j}+2dp_{i-1,j \ xor \ a_i} \] 从 FWT 的角度考虑,转移其实就是每次卷上 b \[ b_{0}=1,b_{a[…
神仙题啊... UOJ #310 题意 将原集合划分成$ A,B,C$三部分,要求满足$ A,B$不全为空且$ A$的异或和等于$ B$的异或和 求方案数 集合大小 $n\leq 10^6$ 值域$val \leq 10^6$ 题解 如果要满足$ A,B$的异或和相同,必然有$ A \cup B$中所有元素异或和为$ 0$ 如果存在这样一个集合$ A \cup B$,这之中的每个元素可以在集合$ A$中也可以在集合$ B$中 即对答案产生$ 2^{|A|+|B|}$的贡献 设每个元素$ a_i$…
题意 给出 \(n\) 个数 \(\{a_1, \cdots, a_n\}\),从中选出两个互不相交的集合(不能都为空),使得第一个集合与第二个集合内的数的异或和相等,求总方案数 \(\bmod 998244353\) . \(n, a_i \le 10^6\) 题解 简单转化一下,其实就是对于每个选取集合中元素异或积为 \(0\) 的集合,都会有 \(2^{|S|}\) 的贡献. 用集合幂级数形式写出来其实就等价于: \[ \prod_{i = 1}^{n} (1 + 2x^{a_i}) \]…
目录 @description@ @solution@ @accepted code@ @details@ @description@ Evan 和 Lyra 都是聪明可爱的孩子,两年前,Evan 开始为一个被称为UOJ的神秘的OI组织工作,在 Evan 与其他小伙伴的努力下,UOJ不仅成了OI界原创比赛的典范,更是因UR这一反人类难度的存在而举世闻名.然而今年,随着 Evan 前往世界彼岸,UOJ一天天减少着他的活力,而就在OI历新年的黎明--NOI的前夕,刚回家不久的Evan听到了清脆的敲门…
来自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]表示...…
Sol 某比赛搬了这题. 首先选择两个不交非空子集且异或和为0的方案数,等价于选择一个异或和为0的集合,并把它分成两部分的方案数. 这显然可以DP来算,设 \(f[i][j]\) 表示前\(i\)个数异或和为\(j\)的方案数,那么转移就是 \(f[i][j]=f[i-1][j]+2\cdot f[i-1][j\;\text{xor}\;a[i]]\) 如果设 \(b_i[0]=1,b_i[a[i]]=2,b_i[j]=0\),那么这个转移就是求\(f\)与\(b_i\;\text{xor}\)…
题目描述: uoj 题解: WTF. 看题解看了一个小时才看明白. 首先有状态$f[i][j]$表示前$i$个东西两人取,最后两人异或和为$j$的有多少方案. 转移为$f[i][j]=f[i-1][j]+2*f[i-1][j \oplus a[i]]$. 显然跑FWT做异或卷积(显然会T). 发现卷积中每次卷的是{1,0,0,--,0,2,0--}这样一个东西. 打表发现FWT后每一项是-1或3. 其实很好解释,从贡献的角度讲,0位的贡献都是1,而$a[i]$位的贡献是2或-2,所以是3或-1.…
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…
题解: 不会FWT,只能水40分了 首先,要观察出的性质就是: 选出的集合要满足所有数亦或等于0,而在其中任选子集都可以满足条件,答案就等于sigma(2^size(s)) 这样dp一波显然就可以O(na)了(由性质可知转移到新状态*2) 然后考虑数很少的 发现同一个数是奇数就是ai偶数就是0 所以仍旧这么dp一下 也就是转移的时候乘(2^1+2^3+2^5....) 不变的同理…
学习编程已经很久了,然而技术还停留在远古时代,丝毫没有什么进步的痕迹,平常也就写一些小软件来处理工作上面遇到的一些很繁杂的问题,天生愚笨或许就是说的我. 黎明前的黑暗期,真的太长了,烂烂的文章就像烂烂的代码一样,没有逻辑感,没有篇幅,简简短短的几行就草草的解决着一个又一个的小问题,却没有一套完整或者大一点的程序. 从现在开始就要重复造轮,实现一套属于自己的功能模块,一个小模块小模块的攻克.…
快两年了,Iveely Search Engine已经走过了5个版本的岁月,虽出生“贫寒”,没有任何开源基金会的支持,没有优秀的“干爹.干妈”,它凭着它的爱好者的支持,0.6.0终于破壳而出,7年前,我开始研究搜索引擎,开始构思我的想法,今天的0.6.0是目前最接近我最初想法的一个版本.简单的说,搜索引擎会让机器人越来越聪明,当然源码依然在这里 (安装部署). 在Iveely Search Engine 0.6.0里,我们为大家带来了什么?新的视野,未来的搜索方式.还记得,我们发布0.1.0的时…
RT,这太谔谔了,我不承认这是模拟赛 但是虽然是搬了三道题,题目本身也还能看,就这么着吧 (怎么机房里就我一道原题都没做过啊 T1 CF24D Broken Robot 比较简单地列出式子之后,我们发现可以自底向上每行做高斯消元求从每个格子出发的期望步数,复杂度$O(n^4)$(边界是最底下一行都是零) 然后我们发现高斯消元的时候每一行对应的方程就那几个地方有数,于是脚动高斯消元一下就可以$O(n^2)$了 #pragma GCC optimize(2) #include<cstdio> #i…
解决涉及子集配凑的卷积问题 一.介绍 1.基本用法 FWT快速沃尔什变换学习笔记 就是解决一类问题: $f[k]=\sum_{i\oplus j=k}a[i]*b[j]$ 基本思想和FFT类似. 首先转化成为另一个多项式$FWT(A),FWT(B)$ 使得:$FWT(A\oplus B)=FWT(A)×FWT(B)$ 这里,$×$是按位乘.这个是$O(n)$的. 然后,再$IFWT$回去即可. 类似于,直接过马路不好走.先从左边走上一座天桥,再从天桥走过去,再到马路右侧走下天桥. 就变成了$O(…
昨天考试由于不会fwt而爆炸,所以今天搞了一下fwt……话说这玩意的普及程度已经很高了.fwt,快速沃尔什变换,可以用于位运算卷积的优化,是一种线性变换,所以就会有许多好的性质(eg:可以直接模,可以修改运算等). & | ^ 的变换定义与方法是基础,在此基础上的扩展与运用是重要的地方.HZOI #1572.宇宙序列 notes: 这就是造成我考试爆炸的考试题,见Contest Record UOJ #310.[UNR #2]黎明前的巧克力 notes: 感觉比较灵活的一道题.首先写出裸dp,之…
目录 与卷积: 代码: 或卷积: 代码: 异或卷积: 代码: FST:子集卷积 代码: 例题: CF914G 代码: uoj310[UNR #2]黎明前的巧克力 代码: CF662C Binary Table 代码: FWT可以解决位运算卷积问题. 即\(h(i)=\sum\limits_{j⊕k=i} f(j)*g(k)\),其中"⊕"表示位运算. 与卷积: 定义\(f\)到\(F\)的变换:\(F(i)=\sum\limits_{j\&i==i}^{ }f(j)\). 这样…
u1s1 距离省选只剩 5 days 了,现在学新算法真的合适吗(( 位运算卷积 众所周知,对于最普通的卷积 \(c_i=\sum\limits_{j+k=i}a_jb_k\),\(a_jb_k\) 的贡献累加到 \(c_{j+k}\) 上,因此这种卷积又被称为加法卷积. 但是对于某些卷积,\(a_jb_k\) 的贡献就不是累加到 \(j+k\) 上了,有一类卷积,\(a_jb_k\) 的贡献会累加到 \(j\otimes k\) 上,其中 \(\otimes\) 是某种位运算,即 \(\&,|…
Day 1 3月有31天废话 今天先颓过了就只剩30天了 初步计划 每天一道字符串/数据结构题 图论学习 根据<若干图论模型探讨>(lyd)复习 二分图与网络流学习 <算法竞赛进阶指南>剩余std 虚树学习 动态规划学习 DP优化学习 特殊DP学习(排名不分先后):插头DP.计数DP.数位DP.概率期望DP.基环树DP.动态DP Day 2 吐槽一句今天的数据结构题P2824 [HEOI2016/TJOI2016]排序-- 数据是真水,纯暴力拿80 然后就不想想正解了......…
看字幕.再也看不下去.自己翻译的位 评价的探讨 1 00:01:58,452 --> 00:02:02,088 人工增雨 期限为32分钟16第二 2 00:02:02,089 --> 00:02:06,292 在10秒内将 人工强降雨 3 00:02:14,534 --> 00:02:18,537 雨水的酸度预计值为8.4 4 00:02:22,476 --> 00:02:25,678 中心周边东南部天气晴 5 00:06:03,864 --> 00:06:05,965 你知…
昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在真实的环境下,一个项目肯定是对应着多个员工的,这毫无疑问, 那么同时,一个比较牛员工也能同时参与多个项目的开发,这就体现了双向多对多的关系. 首先呢,我们得弄清楚在底层数据库中表与表之间的关系,我们创建一个员工表(Employee)和项目表(Project)毫无疑问,那么我们要怎么体现出多对多的关系…