正题

题目链接:https://www.luogu.com.cn/problem/AT4996


题目大意

给出一个0∼2n−10\sim 2^n-10∼2n−1下标的数组ppp,pip_ipi​表示有pip_ipi​的权重概率选择iii。

开始有一个x=0x=0x=0,每次选择一个数字yyy让x=xxoryx=x\ xor\ yx=x xor y

对于每个iii求期望多久后第一次变成iii。

1≤n≤181\leq n\leq 181≤n≤18


解题思路

搞一个异或卷积的生成函数,先搞出概率的函数PPP。

然后设EEE表示答案的函数,那么有
E×P+I=E+cE\times P+I=E+cE×P+I=E+c
ccc表示余项,I(x)=∑i=1∞xiI(x)=\sum_{i=1}^{\infty}x^iI(x)=∑i=1∞​xi

先求出余项ccc来,设S(A)S(A)S(A)表示生成函数AAA的所有系数和
S(E)×S(P)+S(I)=S(E)+cS(E)\times S(P)+S(I)=S(E)+cS(E)×S(P)+S(I)=S(E)+c
S(P)=1S(P)=1S(P)=1,S(I)=2nS(I)=2^nS(I)=2n,那我们有c=S(I)=2nc=S(I)=2^nc=S(I)=2n

所以就有
E×P+I=E+2nE\times P+I=E+2^nE×P+I=E+2n
E×(P−1)=2n−IE\times (P-1)=2^n-IE×(P−1)=2n−I
FWT(E)=FWT(2n−I)FWT(P−1)FWT(E)=\frac{FWT(2^n-I)}{FWT(P-1)}FWT(E)=FWT(P−1)FWT(2n−I)​

然后跑FWTFWTFWT就好了。

注意跑出来的E0≠0E_0\neq 0E0​​=0,我们要把所有的答案减去E0E_0E0​

时间复杂度O(2nn)O(2^nn)O(2nn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1<<19,P=998244353;
ll n,k,f[N],g[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void FWT(ll *f,ll op){for(ll p=2;p<=n;p<<=1){ll len=(p>>1);for(ll k=0;k<n;k+=p)for(ll i=k;i<k+len;i++){ll x=f[i],y=f[i+len];f[i]=(x+y)*op%P;f[i+len]=(x-y+P)*op%P;}}return;
}
signed main()
{scanf("%lld",&k);n=1<<k;ll sum=0;for(ll i=0;i<n;i++){scanf("%lld",&f[i]);sum=(sum+f[i])%P;g[i]=P-1;}sum=power(sum,P-2);for(ll i=0;i<n;i++)f[i]=f[i]*sum%P;g[0]=(g[0]+n)%P;f[0]=(f[0]+P-1)%P;FWT(f,1);FWT(g,1);for(ll i=0;i<n;i++)f[i]=g[i]*power(f[i],P-2)%P;FWT(f,(P+1)/2);for(ll i=0;i<n;i++)printf("%lld\n",(f[i]-f[0]+P)%P);return 0;
}

AT4996-[AGC034F]RNG and XOR【FWT,生成函数】相关推荐

  1. AtCoder AGC034F RNG and XOR (概率期望、FWT)

    题目链接 https://atcoder.jp/contests/agc034/tasks/agc034_f 题解 无论多水的题我都不会啊.jpg 首先考虑一个图上随机游走的经典问题,无向图求从\(0 ...

  2. 【luogu AGC034F】RNG and XOR(FWT)

    RNG and XOR 题目链接:luogu AGC034F 题目大意 给你一个长度为 2^n 的数组 A. 一开始有一个 0 0 0 数,然后每次你随机给它异或上 0~2^n-1 中的数,随机到 i ...

  3. AGC034 F - RNG and XOR

    简要题意 : \(0\) 到 \(2^n-1\) 的数每一个数有一个出现概率\(p_i\) (保证\(\sum p_i =1\)) ,数x初始是0,每次异或上出现的数,对每个数求x最先变成这个数的期望 ...

  4. GOOD BYE OI

    大米饼正式退役了,OI给我带来很多东西 我会的数学知识基本都在下面了 博客园的评论区问题如果我看到了应该是会尽力回答的... 这也是我作为一个OIer最后一次讲课的讲稿 20190731 多项式乘法 ...

  5. 【AtCoder】AGC034

    AGC034 刷了那么久AtCoder我发现自己还是只会ABCE(手动再见 A - Kenken Race 大意是一个横列,每个点可以跳一步或者跳两步,每个格子是空地或者石头,要求每一步不能走到石头或 ...

  6. jiedai算法模板合集(正在肝2021.8.15)

    文章目录 基础模板 常用板子 数学题常用板子 输出挂 fread快读 高精度 分数类 打表压缩 基数排序 杂项 数据结构 树状数组 一维树状数组 二维树状数组 线段树 主席树 线段树合并/裂开 吉司机 ...

  7. UNR2 黎明前的巧克力

    C 黎明前的巧克力 [* hard] 给定数列 (a),长度为 (n),保证 (n,a_ile 10^6),求有多少种方案选出两个集合 (A,B) 使得两个集合的异或和相同,不能均为空集,答案对 (9 ...

  8. 《小学生都能看懂的快速沃尔什变换从入门到升天教程》(FWT / FMT / FMI)(最最严谨清晰的证明!零基础也能得学会!)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 0x00 卷积 0x01 多项式 0x02 卷积的定义 0x03 卷积的基本性质 0x04 位运 ...

  9. UOJ #310 黎明前的巧克力 (FWT)

    题目传送门 题目大意:给你一个序列,定义一个子序列的权值表示子序列中元素的异或和,现在让你选出两个互不相交的子序列,求选出的这两个子序列权值相等的方案数,$n,a_{i}\leq 10^{6}$ 这是 ...

最新文章

  1. ES6深入学习记录(一)class方法相关
  2. 基于caffe的度量学习实现(Siamese network Triplet network)
  3. 马云“赢在中国”对于80后创业者的忠告
  4. 【SSM框架系列】Spring - JdbcTemplate声明式事务
  5. ES-Hadoop学习之ES和HDFS数据交换
  6. [Windows Server 2012] 安装PHP+MySQL方法
  7. EasyInvoice 简介
  8. 小米海外召回有潜在风险的电动滑板车 中国区无此风险
  9. (转) 如何在JavaScript与ActiveX之间传递数据1
  10. Add Juniper SRX Cluster into JunOS Space 16.1 Security Director
  11. UC,浏览器,不愧是全球使用量最大的第三方手机浏览器!
  12. 计算机的影视后期论文,浅谈影视后期制作-毕业论文提纲范文
  13. git 一个分支完全覆盖另一个分支
  14. java_2017.9.18
  15. ffmpeg推送rtsp流或者视频文件到rtsp服务器
  16. 数据可视化:在 React 项目中使用 Vega 图表 (一)
  17. 江南大学计算机阶段测试题,江南大学2016.09计算机应用基础(专科类)第2阶段测试题...
  18. Unity解析和读取文本—— txt 文件
  19. Android一键加QQ群
  20. Java利用Jave转换视频格式为3gp

热门文章

  1. 用java写注册表单_利用HTML表单标签编写一个注册页面
  2. 5码默认版块_5个小众的生活学习类的宝藏App
  3. 苹果白屏一直显示苹果_最新消息显示:苹果还要发新品
  4. linux新建文件夹明率,linux新建文件和文件夹命令
  5. MYSQL数据库表大小计算,计算mysql数据库数据表的大小,不精确,只是大略的数据...
  6. python编写正则表达式匹配单词_Python正则表达式匹配整个单词
  7. 计算机技术题目,计算机技术题目.doc
  8. DEBUG org.springframework.web.servlet.DispatcherServlet - Error rendering view [org.thymeleaf.spring
  9. MySql :Could not create connection to database server.
  10. 操作系统习题——(习题二)