最新要闻
- 热文:构造柱的作用是什么_构造柱的作用
- 焦点热讯:网友称余额宝页面显示乱码 支付宝回应:正在修复 不影响资金安全
- 《龙马精神》电影中真打实摔 成龙:我69岁动作比你还快
- 热点!说十个需要送老婆礼物的节日
- 大阳睿能全新动力首款车型H12下线:电机1700W 续航150公里
- 249元 小米米家自动真空封口机发布:-70KPa大吸力
- 全球快资讯丨世界各地小孩的玩具对比:不止文化与财富的差距
- 当前动态:马斯克开源推特算法反被指责:隐藏重要细节、与承诺不符
- 【当前独家】《王者荣耀》S31赛季4月13日上线 新英雄姬小满来了
- 深圳开放大学优秀学生李德炎:保持学习状态,争做行业模范
- 速递!定价全球最低!国产科幻FPS《边境》国区售价68元起
- 天天观热点:孟羽童已不是董明珠秘书引热议 本人回应:很享受格力市场营销工作
- 今日看点:米粉换上Redmi Note 12 Turbo:陪伴他5年的小米6正式退役
- 天天即时看!网友看电影觉得难看成功退一半费用 影城:散场20分钟内可办理
- 电动自行车调速器网上公开售卖!专家:私改限速或引发燃爆事故
- 天天观天下!王者更新:祈愿夺宝重启,520传说天幕返场,5英雄喜提新衣
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界速递!2023.4.7【模板】快速沃尔什变换FWT
2023.4.7【模板】快速沃尔什变换FWT
题目概述
给定长度为 \(2^n\) 两个序列 \(A,B\),设
(相关资料图)
\(C_i=\sum_{j\oplus k = i}A_j \times B_k\)
分别当 \(\oplus\) 是 or,and,xor 时求出 \(C\)
我们通常将这个操作,叫做“位运算卷积”,因为它的卷积是按照位运算法则“卷”起来的。
算法流程
或
当运算符是或时,我们类似于FFT设计一个函数,使得原来的\(O(n^2)\)卷积可以使用\(O(n)\)对应点乘来实现。
而在或运算中,这个函数可以简单地设计为
\[G_i = \Sigma_{j|i = i}b[j]\]\[F_i = \Sigma_{j|i = i}\ a[j]\]证明过程如下:
题目中的\(C_i\)要求\(C_i = \Sigma_{j|k = i}a_jb_k\)
\[F_x * G_x = \Sigma_{i|x = x}a[i] * \Sigma_{j|x = x}b[j]\]\[ = \Sigma_{i|x = x}\Sigma_{j|x = x}a[i] * b[j]\]\[= \Sigma_{(i|j)|x = x}a[i] * b[j]\]\[= F_c[i]\](\(F_c[i]\)指以c为基的函数,构造与\(F_i\),\(G_i\)一致)
如何由a快速转换成\(F_a\)呢?
考虑分治,考虑0~\(2^{n - 2} - 1\)和\(2^{n - 2}\)~\(2^{n - 1} - 1\)两个区间,考虑与左边的数k(小于\(2^{n - 2}\))或起来等于k的数字,其与k + \(2^{n - 2}\)或起来一定是k + \(2^{n - 2}\),所以每层中将左半边的相应位置累加到右半边即可,然而左半边的数或上右半边的数,结果肯定是右半边的数,不会对左半边产生贡献,所以左半边的值仍然等于原来的值。
如何将\(F_a\)快速转换成a呢?
刚刚我们发现,右半边的答案被累加了一个左半边,所以减掉就好了。
这两个过程可以合并:
inline void OR(int *f,int op){for(int mid = 1;mid <= n;mid <<= 1)for(int i = 0,r = mid << 1;i + mid <= n;i += r)for(int j = i;j < i + mid;j++)f[j + mid] = (f[j + mid] + f[j] * op) % MOD;}
不仅用于变换,我们发现这个过程相当于以“二进制下哪些位为1”为条件对i进行了一次子集求和,即f[i]代表了i及其子集的和,这在很多方面都有极大应用。
与
仿照或运算,我们定义(不一样):
\[F_i = \Sigma_{j|i = j}\ a[j]\]\[G_i = \Sigma_{j|i = j}b[j]\]所以
\[F_i * G_i = \Sigma_{j|i = j}a[j] * \Sigma_{k|i = k}b[k]\]\[= \Sigma_{j|i = j}\Sigma_{k|i = k}a[j] * b[k]\]\[= \Sigma_{(j \& k) | i = (j \& k)}a[j] * b[k]\]\[= \Sigma_{x|i = x}\Sigma_{j \& k = x}a[j] * b[k]\]\[ = \Sigma_{x|i = x}c[x]\]\[= F_c [x]\]我们发现,分治的时候,如果右半边的一个数k与上另一个数等于k,那么另一个数与上k - \(2^{n -2}\)(最高位清空,其余不变)也一定等于k - \(2^{n - 2}\)。所以左半边的答案加上右半边,而右半边不变即可。
inline void AND(int *f,int op){for(int mid = 1;mid <= n;mid <<= 1)for(int i = 0,r = mid << 1;i + mid <= n;i += r)for(int j = i;j < i + mid;j++)f[j] = (f[j] + f[j + mid] * op) % MOD;}
异或
要求做到\(C_i=\sum_{j\oplus k = i}A_j \times B_k\)
我们设
\[F_x = \Sigma_{i = 0}^{n}g(x,i)a[i]\]\[G_x = \Sigma_{i = 0}^ng(x,i)b[i]\]需要做到\(\Sigma_{i = 0}^{n}g(x,i)C_i = \Sigma_{j = 0}^{n}g(x,j)a[j] \ * \ \Sigma_{i = 0}^ng(x,i)b[i]\)
即\(\Sigma_{j = 0}^n \Sigma_{k = 0}^ng(x,j\oplus k)a[j]b[k] = \Sigma_{j = 0}^n \Sigma_{k = 0}^ng(x,j)g(x,k)a[j]b[k]\)
所以参数g需要满足\(g(x,j \oplus k) = g(x,j)g(x,k)\)
有一个结论,即异或前后1的个数的奇偶性不会发生改变(分类讨论推一下)
设\(popcount(x)\)为x二进制表示下1的个数
则\(g(x,i) = (-1)^{popcount(i \cap x)}\)
此处\(i \cap x\)为将i中x相应的位数是1的位,可以说是\(i \& x\)
这个地方选择-1这个数字因为它最好体现“奇偶性”这个概念
所以我们得到
\[F_x = \Sigma_{i = 0}^n(-1)^{popcount(i\&x)}a[i]\]对于新加入的一位,我们进行分类讨论:
1.若k为左半边的点,左半边的答案仍然为原来的答案,右半边的点在最高位上0&1仍然是0,没有改变popcount,所以加上右半边答案。
2.若k为右半边的点,左半边的点在最高位上&后等于0,直接加上,但是右半边的点在最高位1&1=1,所有数popcount都加了1,全部反号,所以减去右半边答案。
综上,在每次向上一层时:
左 = 左 + 右
右 = 左 - 右
在逆过程中,为了得到原来的左、右:
左 = (左 + 右) / 2
右 = (左 - 右) / 2
这两个过程也可以合并
inline void XOR(int *f,int op){for(int mid = 1;mid <= n;mid <<= 1)for(int i = 0,r = mid << 1;i + mid <= n;i += r)for(int j = i;j < i + mid;j++){int X = f[j],Y = f[j + mid];f[j] = (X + Y) % MOD;f[j + mid] = (X - Y + MOD) % MOD;f[j] = 1ll * f[j] * op % MOD;f[j + mid] = 1ll * f[j + mid] * op % MOD;}}
如果是逆过程,op就是2关于MOD的逆元,否则就是1
Code
#includeusing namespace std;#define int long longconst int N = (1 << 17) + 5,MOD = 998244353,inv = 499122177;int a[N],b[N],c[N],n;inline void OR(int *f,int op){for(int mid = 1;mid <= n;mid <<= 1)for(int i = 0,r = mid << 1;i + mid <= n;i += r)for(int j = i;j < i + mid;j++)f[j + mid] = (f[j + mid] + f[j] * op) % MOD;}inline void AND(int *f,int op){for(int mid = 1;mid <= n;mid <<= 1)for(int i = 0,r = mid << 1;i + mid <= n;i += r)for(int j = i;j < i + mid;j++)f[j] = (f[j] + f[j + mid] * op) % MOD;}inline void XOR(int *f,int op){for(int mid = 1;mid <= n;mid <<= 1)for(int i = 0,r = mid << 1;i + mid <= n;i += r)for(int j = i;j < i + mid;j++){int X = f[j],Y = f[j + mid];f[j] = (X + Y) % MOD;f[j + mid] = (X - Y + MOD) % MOD;f[j] = 1ll * f[j] * op % MOD;f[j + mid] = 1ll * f[j + mid] * op % MOD;}}signed main(){cin>>n;n = (1 << n) - 1;for(int i = 0;i <= n;i++) cin>>a[i];for(int j = 0;j <= n;j++) cin>>b[j];memset(c,0,sizeof(c));OR(a,1);OR(b,1);for(int i = 0;i <= n;i++) c[i] = 1ll * a[i] * b[i] % MOD;OR(a,MOD - 1);OR(b,MOD - 1);OR(c,MOD - 1);for(int i = 0;i <= n;i++) cout<
一道好的练习题
洛谷P3175 HAOI2015 按位或 P3175 [HAOI2015]按位或 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
刚开始你有一个数字 \(0\),每一秒钟你会随机选择一个 \([0,2^n-1]\) 的数字,与你手上的数字进行或(C++,C 的 |
,pascal 的 or
)操作。选择数字 \(i\) 的概率是 \(p_i\)。保证 \(0\leq p_i \leq 1\),\(\sum p_i=1\) 。问期望多少秒后,你手上的数字变成 \(2^n-1\)。
算法流程
这道题需要用到一个结论:min-max容斥原理
对于一个集合S,有:
\[max(S) = \sum_{T \subseteq S}(-1)^{|T| + 1}min(T)\]\[min(S) = \sum_{T \subseteq S}(-1)^{|T| + 1}max(T)\]"下面我们尝试着给出证明,这里只证明第一个等式好了,后边的可以自行推出。
其实只需要证明一件事,就是除了min(T)=max(S)的那个值,其他的min值都被消掉了就可以了(这里说明一下,我们假定集合中的元素两两相异,如果存在相同的值的话,我们给其中几个加上一些eps扰动一下即可,反正不影响最值就是了)。
先来说明max(S)的系数为什么是1,假设中S最大的元素是a,那么我们会发现只有min(a)=max(S)所以max(S)的系数必须是1。
然后再说明为什么别的min都被消掉了,假设某个元素b的排名是k,那么min(T)=b当且仅当我们选出的集合是后n-k个的元素构成的集合的子集然后并上{b}得到的,我们会发现显然这样的集合有2n−k种,而显然这其中恰有2n−k−1中是有奇数个元素的,恰有2n−k−1种是有偶数个元素的,两两相消自然就成0了,当然上述等式在k=n的时候不成立,但是此时剩下的刚好是最大值。"
(选自洛谷上shadowice1984的题解)
更好的一点是,这个等式在期望意义下仍然成立。
设\(E(max(S))\)为最晚的一位(二进制)出现时间的期望值。
套用公式得到:\(max(S) = \sum_{T \subseteq S}(-1)^{|T| + 1}min(T)\),考虑min(T)为只要T中任何一位出现就好了,所以
\[E(min(T)) = \frac{1}{\sum_{G \cap T \neq \emptyset }p[G]}\]那么和T有交集的集合如何算呢?
有交集的不好算,我们就算没有交集的,没有交集的集合一定属于T关于全集的补集,即\(T \oplus (2^n - 1)\),所以
\[E(min(T)) = \frac 1{1 - \sum_{G \cap T = \emptyset}p[G]}\]至于\(T \oplus (2^n - 1)\)的子集和,用FWT的or类型计算即可
注意每次加答案是要判断\({1 - \sum_{G \cap T = \emptyset}p[G]}\)是否为0
#includeusing namespace std;const int N = 1 << 20;double p[N],ans = 0.0000,eps = 1e-8;int n,sta,num[N];int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;n = (1 << n) - 1;for(int i = 0;i <= n;i++) cin>>p[i],num[i] = num[i >> 1] + (i & 1);for(int mid = 1;mid <= n;mid <<= 1)for(int i = 0,r = mid << 1;i + mid <= n;i += r)for(int j = i;j < i + mid;j++)p[mid + j] += p[j];for(int i = 1;i <= n;i++)if(1 - p[n ^ i] > eps)ans += ((num[i] & 1) ? 1 : -1) * (1.00 / (1 - p[n ^ i]));if(ans < eps) cout<<"INF";else cout<
关键词:
-
世界速递!2023.4.7【模板】快速沃尔什变换FWT
2023 4 7【模板】快速沃尔什变换FWT题目概述给定长度为$2^n$两个序列$A,B$,设$C_i= sum_{j oplusk=i}A_j timesB_k$分别当$
来源: 世界速递!2023.4.7【模板】快速沃尔什变换FWT
今日报丨面试题百日百刷-HBase HRegionServer宕机如何处理
第135篇:Three.js基础入门
每日消息!交易商协会评估更新定向债务融资工具专项机构投资人名单
美国3月非农就业人口增幅降至23.6万 失业率为3.5%
热文:构造柱的作用是什么_构造柱的作用
焦点热讯:网友称余额宝页面显示乱码 支付宝回应:正在修复 不影响资金安全
《龙马精神》电影中真打实摔 成龙:我69岁动作比你还快
热点!说十个需要送老婆礼物的节日
焦点观察:火热出炉 秘汁全鸡的数字新“味”
大阳睿能全新动力首款车型H12下线:电机1700W 续航150公里
249元 小米米家自动真空封口机发布:-70KPa大吸力
全球快资讯丨世界各地小孩的玩具对比:不止文化与财富的差距
当前动态:马斯克开源推特算法反被指责:隐藏重要细节、与承诺不符
【当前独家】《王者荣耀》S31赛季4月13日上线 新英雄姬小满来了
深圳开放大学优秀学生李德炎:保持学习状态,争做行业模范
天天快看点丨自动旋转ROS小车(rviz+urdf+xacro)(附加python操作键盘控制小车运动)
每日资讯:java -- Math、BigInteger、BigDecimal类和基本类型的包装类、正则表达式
【快播报】黑田东彦“卸任”言论释放宽松信号 日债收益率曲线平坦化下移
速递!定价全球最低!国产科幻FPS《边境》国区售价68元起
天天观热点:孟羽童已不是董明珠秘书引热议 本人回应:很享受格力市场营销工作
今日看点:米粉换上Redmi Note 12 Turbo:陪伴他5年的小米6正式退役
天天即时看!网友看电影觉得难看成功退一半费用 影城:散场20分钟内可办理
电动自行车调速器网上公开售卖!专家:私改限速或引发燃爆事故
环球资讯:ps 备忘清单_开发速查表分享
天天观天下!王者更新:祈愿夺宝重启,520传说天幕返场,5英雄喜提新衣
焦点速读:离谱!观致汽车要倒台 车主也被拉下水:被厂商告了
全球气象预报大模型风乌发布:有效预报时间首破10天
事关“刹车失灵”争议核心数据 本田中国召回超20万辆雅阁
长城财报漂亮 是因为新能源汽车卖得不漂亮
全球新资讯:仅1999元!铁威马F4-423(4G)四盘位NAS开启预售:双2.5G网口
全球速读:大美游轮2022年亏损2511.24万同比亏损增加 游轮运营业务毛利减少
Privilege Escalation 权限提升
即时焦点: 如何处理Xcode上传IPA文件后无法在后台架构版本中显示的问题?
当前要闻:易基因:群体分析揭示了DNA甲基化在番茄驯化和代谢多样性中的作用|组学研究
记录-VueJs中如何使用Teleport组件
Springfox与SpringDoc——swagger如何选择(SpringDoc入门)
澳大利亚一飞机掉入印度洋:全员坠海 未有伤亡
世界速递!比亚迪大疆达成合作!全新海狮将用上高级辅助驾驶技术:纯视觉走天下
每日消息!希捷推出星球大战版SSD:三款RGB光剑任选
资讯推荐:一图看懂!小米/红米多款热门机型官方降价:小米12S/13全系有活动
环球新动态:用两年就卡?3分钟学会选电视硬件
当前播报:申城交警多措并举加强高速公路和城市快速路事故预防工作
世界头条:用 Go 剑指 Offer 17. 打印从1到最大的n位数
【天天时快讯】获取Python函数信息的方法
世界信息:GPT对SaaS领域有什么影响?
全球新资讯:什么是 Java 字节码?采用字节码的好处是什么?
【天天聚看点】ubuntu离线安装tcpdump
因债券承销尽调不充分等问题 民生证券被上交所出具书面警示
每日视讯:最新确认:小米13 Ultra用上了USB 3.X接口
《流浪地球2》4月14日网络首播!导演郭帆:修改了一百多个视效镜头
差评高达86%!艺画开天官博恢复《三体》动画相关微博
【世界聚看点】等等党狂喜!比亚迪海豹有优惠了:本月订车至享高3.1万元减免
全球热门:荣耀Magic5 Pro“首碎”!SUV压过屏幕依旧完好
每日热闻!微信界面黑色怎么设置成白色_微信变成黑色怎么调过来
【独家】使用Drone+gitea配置自己的CICD流程
全球热消息:收评:两市震荡走强创指涨0.84% 医药、人工智能概念涨幅居前
最资讯丨马来西亚原装进口:猫山王榴莲雪糕4元/支狂促
索尼痛斥英国CMA:偏袒微软过于荒谬
当前头条:合资A级轿车更难了!2023款比亚迪秦PLUS EV冠军版上市:12.98万起
苹果中国杀疯!iPhone14售价跌破5000元 买它还是华为P60?
环球要闻:网红密子君带货无骨鸡爪!粉丝提醒她有蟑螂 本人道歉
保罗:比赛起起伏伏很奇怪 从未跟KD这种能吸引包夹的球员共事过
焦点热门:全文索引:Apache Lucene(一)
天天热讯:Java 自增自减运算符和移位运算符介绍
世界观速讯丨NTP时间同步服务器(频率同步)包含帧同步、载波同步、位同步
sms-activate短信验证码问题
世界新资讯:153. 寻找旋转排序数组中的最小值
【财经分析】新规创新保险服务模式 完善多层次长期护理保障制度
国风开放世界新作:网易新游《暂时叫它:天字七六》公布
世界今热点:全新MacBook要用OLED屏!如果不烧屏还是挺香的
或8万起售 比亚迪海鸥四颜色曝光:绿、黑、白、粉你选谁
这可能是最好看的RX 7900 XTX:华擎发布太极白色版
科大讯飞刘聪:5月6日将发布“1+N认知智能大模型”
泫雅和张贤胜的组合叫什么?泫雅和张贤胜在一起过吗?
蛇沼鬼城后面一部是什么?蛇沼鬼城录像带里的吴邪是谁?
张一山为什么剃光头?张一山出演的电视剧有哪些?
南派三叔为什么要封笔?南派三叔的全部作品顺序
被嫌弃的松子的一生讲了什么? 松子一生坎坷结局是怎么死的?
【新视野】山西省印发钢铁行业转型升级2023年行动计划
全球播报:[Web Server]Tomcat调优之监控连接池/线程池
焦点快播:(笔记)电源缓启动工作原理
世界速看:详解 Flink Catalog 在 ChunJun 中的实践之路
【环球速看料】Python selenium过图片滑块验证
拼多多百亿补贴“厂家直销”受阻:京东自营再现“排他性”竞争
细思极恐!韩国分析日本农产品超20%检出放射性物质铯
环球热讯:南财基金通·混合型基金收益排行榜(4月6日)
【天天热闻】Java中子类重写父类方法的思想本质!
头条焦点:CRLF和LF区别
焦点日报:买车更方便!新车上牌免查验试点新增21个城市:看看有你家吗
天天资讯:工资6000面试6轮当事人发声:没被录用 可能介意我年龄大
当前观察:出游正值好春光!“五一”旅游需求爆发
为何全球这么多人首选iPhone:苹果保值率第一 安卓机惨
环球资讯:气象台:未来十天冷空气影响频繁 9日起沙尘天气将卷土重来
天天动态:分库分表之ShardingSphere
要闻:新农保和社保可以同时交不_新农保和社保可以同时交
真不是人扮的?黑猩猩吃完饭主动到水池里洗盘子游客看呆
每日速看!离地球最近的黑洞被发现!科学家:还有许多黑洞待发现
焦点日报:比亚迪百万级纯电超跑!仰望U9确定参加上海车展:加速2秒级
中规中矩!杜兰特半场10中4得11分5板2助 共出现3次失误