RNG and XOR

题目链接:luogu AGC034F

题目大意

给你一个长度为 2^n 的数组 A。
一开始有一个 0 0 0 数,然后每次你随机给它异或上 0~2^n-1 中的数,随机到 i i i 的概率跟 Ai+1 成正比。
然后对于 0~2^n-1 每个数问你第一次变成这个数的期望异或次数。

思路

考虑使用生成函数, f i f_i fi​ 为答案。

f 0 = 0 f_0=0 f0​=0
f i = 1 + ∑ j = 0 2 n − 1 f i ⊕ j p j f_i=1+\sum\limits_{j=0}^{2^n-1}f_{i\oplus j}p_j fi​=1+j=0∑2n−1​fi⊕j​pj​
F + f 0 ′ = I + F ∗ P F+f'_0=I+F*P F+f0′​=I+F∗P

I = ∑ i = 0 2 n − 1 x i I=\sum\limits_{i=0}^{2^n-1}x^i I=i=0∑2n−1​xi

求 f 0 ′ f'_0 f0′​:
F = ∑ i = 0 ∞ f i x i F=\sum\limits_{i=0}^{\infty}f_ix^i F=i=0∑∞​fi​xi
S ( F ) = ∑ i = 0 ∞ f i S(F)=\sum\limits_{i=0}^{\infty} f_i S(F)=i=0∑∞​fi​
S ( F ) + f 0 ′ = S ( I ) + S ( F ) ∗ S ( P ) S(F)+f'_0=S(I)+S(F)*S(P) S(F)+f0′​=S(I)+S(F)∗S(P)
S ( P ) = 1 , S ( I ) = 2 n S(P)=1,S(I)=2^n S(P)=1,S(I)=2n
f 0 ′ = 2 n f_0'=2^n f0′​=2n

F + 2 n = I + F ∗ P F+2^n=I+F*P F+2n=I+F∗P
F ( P − 1 ) = 2 n − I , F = 2 n − I P − 1 F(P-1)=2^n-I,F=\dfrac{2^n-I}{P-1} F(P−1)=2n−I,F=P−12n−I​

但是有一个问题就是 [ x 0 ] ( P − 1 ) [x^0](P-1) [x0](P−1) 它 FWT 之后会是 0 0 0。
那就别管第 0 0 0 位,当他是 0 0 0 然后 IFWT。
那我们还有一个限制条件是 f 0 = 0 f_0=0 f0​=0,那你 IFWT 之后 0 0 0 会赋值到的位置是所有,但你现在没有了,那你 f 0 f_0 f0​ 现在的值是 − x -x −x,那你给所有位置的值都加上 x x x,就相当于处理了 0 0 0 位置的贡献了。

代码

#include<cstdio>
#define ll long long
#define mo 998244353using namespace std;const int N = 1 << 18;
int n;
ll p[N], a[N], sum, I[N], f[N], inv2;ll ksm(ll x, ll y) {ll re = 1;while (y) {if (y & 1) re = re * x % mo;x = x * x % mo; y >>= 1;}return re;
}void FWT(ll *f, int n, int op) {for (int mid = 1; mid < n; mid <<= 1)for (int R = (mid << 1), j = 0; j < n; j += R)for (int k = 0; k < mid; k++) {ll x = f[j | k], y = f[j | mid | k];if (op == 1) {f[j | k] = (x + y) % mo;f[j | mid | k] = (x - y + mo) % mo;}else {f[j | k] = (x + y) * inv2 % mo;f[j | mid | k] = (x - y + mo) * inv2 % mo;}}
}int main() {inv2 = (mo + 1) / 2;scanf("%d", &n);for (int i = 0; i < (1 << n); i++) scanf("%lld", &a[i]), (sum += a[i]) %= mo;sum = ksm(sum, mo - 2); for (int i = 0; i < (1 << n); i++) p[i] = a[i] * sum % mo;p[0] = (p[0] - 1 + mo) % mo;I[0] = (1 << n); for (int i = 0; i < (1 << n); i++) I[i] = (I[i] - 1 + mo) % mo;FWT(p, 1 << n, 1); FWT(I, 1 << n, 1);for (int i = 1; i < (1 << n); i++) f[i] = I[i] * ksm(p[i], mo - 2) % mo;FWT(f, 1 << n, -1);ll fix = f[0];for (int i = 0; i < (1 << n); i++) f[i] = (f[i] - fix + mo) % mo;for (int i = 0; i < (1 << n); i++) printf("%lld\n", f[i]);return 0;
}

【luogu AGC034F】RNG and XOR(FWT)相关推荐

  1. 【luogu CF1430C】Numbers on Whiteboard(构造)(推论)

    Numbers on Whiteboard 题目链接:luogu CF1430C 题目大意 给你一个数组 1,2,-,n,你每次可以选两个数删除,然后放进它们的平均值. 要最小化最后剩下的数,并写出构 ...

  2. 【luogu CF1430A】Number of Apartments(暴力)

    Number of Apartments 题目链接:luogu CF1430A 题目大意 给你一个数 n,求 3x+5y+7z=n 的一个非负整数解. 思路 一开始看半天没看出来要怎么搞. 结果一看范 ...

  3. 【校内模拟】西行寺无余涅槃(FWT)

    题解: 直接做 FWT 考虑下面这个式子: F ^ S = ∏ i = 1 n ( ∑ j = 1 k ( − 1 ) ∣ S ∩ p [ i ] [ j ] ∣ a j ) \hat F_S=\pr ...

  4. 【AI实战】快速掌握TensorFlow(二):计算图、会话

    2019独角兽企业重金招聘Python工程师标准>>> 在前面的文章中,我们已经完成了AI基础环境的搭建(见文章:Ubuntu + Anaconda + TensorFlow + G ...

  5. 【面试系列】6种单例模式(Singleton)实现方法比较

    转载文章,文章经 LiteCodes 授权,转载至本博客. 原文地址:[面试系列]6种单例模式(Singleton)实现方法比较 下述代码均省略了 Singleton 类的业务代码段,仅表现作为单例所 ...

  6. 【深度学习】神经网络结构搜索(NAS)与多模态

    [深度学习]神经网络结构搜索(NAS)与多模态 文章目录1 概述 2 经典的NAS方法2.1 搜索空间2.2 搜索策略2.3 性能评估 3 多模态 4 多模态表示学习 Multimodal Repre ...

  7. Python之路【第二篇】:Python基础(一)

    Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name ...

  8. 【常用技巧】标准模板库(STL)

    [常用技巧]标准模板库(STL) 在前几个章节中我们已经使用了诸如队列.堆.堆栈.vector 等标准模板库中的模板,切身感受到了它给我们带来的极大便利.在本节中,我们还要介绍两种标准模板--stri ...

  9. 【知识总结】多项式全家桶(一)(NTT、加减乘除和求逆)

    我这种数学一窍不通的菜鸡终于开始学多项式全家桶了-- 必须要会的前置技能:FFT(不会?戳我:[知识总结]快速傅里叶变换(FFT)) 以下无特殊说明的情况下,多项式的长度指多项式最高次项的次数加\(1 ...

最新文章

  1. active set + serving cell
  2. 他自学成才,坐拥38w粉丝,技术类第一大号!
  3. Android Studio 新建drawable-hdpi、drawable-mdpi等
  4. yafeilinux.com的开源项目非常好的东西
  5. .NET 5 中的隐藏特性
  6. linux-Centos7安装nginx
  7. mysql乐观锁重试_乐观锁加重试,并发更新数据库一条记录导致:Lock wait timeout exceeded...
  8. win7一直显示正在启动_win7系统中提高启动速度并且禁用某些软件启动的操作小技巧...
  9. 未来教育计算机二级书怎么样,未来教育计算机二级
  10. 【数据库】Mysql函数DATE_FORMAT() 显示日期/时间
  11. 机器学习 | 回归评估指标
  12. 人工智障学习笔记——机器学习(15)t-SNE降维
  13. 容器编排技术 -- Kubernetes kubectl patch 命令详解
  14. 如何抓取Camera systrace
  15. HTML的基本知识(三)
  16. 如何在C语言中巧用正则表达式
  17. 新闻 - 被遗忘的“活化石”:BBS没落中求生
  18. 移动端开发的未来在哪里?-Tamic博客
  19. Unity发布VR项目不能唤起VR头盔
  20. Android复习系列③之《Android筑基》

热门文章

  1. 【Shader】简单的水面波纹效果
  2. iterm2,tmux使用笔记
  3. brew install node 报错:Error: No such file or directory @ dir_chdir Bottle installation failed:
  4. 深深深C/C++基础
  5. 我的Windows8体验
  6. 关于windows7开机黑屏的解决办法
  7. Android面试资料集合,内容太过真实
  8. 手机用户界面和多媒体版面有价值问题整理[j2medev.com][0406更新]
  9. 程序员需要具备的能力
  10. 前端性能优化学习 02 Web 性能指标