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

首先转化问题,考虑我们求的相当于是每个数变成0的期望次数。

于是设\(x[i]\)表示i的答案

\[ \begin {aligned} x[i] &= \sum x[j]*p_{i\ xor\ j} + 1 \ (i>0) \\ x[0] &= 0 \end {aligned} \]

写成异或卷积

\[ \lbrace x[0],x[1],x[2],... \rbrace XOR \lbrace p[0],p[1],p[2],... \rbrace = \lbrace x[0] + {2^n} -1,x[1]-1,x[2]-1,... \rbrace \]

\[ \lbrace x[0],x[1],x[2],... \rbrace XOR \lbrace p[0]-1,p[1],p[2],... \rbrace = \lbrace {2^n} -1,-1,-1,... \rbrace \]

然后异或卷积下做一次求逆就行了。

注意的是0这个位置是{0,0},这个可以用x[0]=0还原。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
inline int add(int a,int b){a+=b;return a>=mod?a-mod:a;}
inline int sub(int a,int b){a-=b;return a<0?a+mod:a;}
inline int mul(int a,int b){return (ll)a*b%mod;}
inline int qpow(int a,int b){int ret=1;for(;b;b>>=1,a=mul(a,a))if(b&1)ret=mul(ret,a);return ret;}
const int inv2=qpow(2,mod-2);
/* math */
int n,s;
inline void FWT(int *t,int n,int type){//xorfor(int step=1;step<n;step<<=1)for(int i=0;i<n;i+=step<<1)for(int j=0;j<step;j++){int x=t[i+j],y=t[i+j+step];t[i+j]=add(x,y),t[i+j+step]=sub(x,y);if(type==-1)t[i+j]=mul(t[i+j],inv2),t[i+j+step]=mul(t[i+j+step],inv2);}
}
const int N=1<<18;
int p[N],a[N];int main()
{cin >> n;for(int i=0;i<1<<n;i++)scanf("%d",&p[i]),s=add(s,p[i]);s=qpow(s,mod-2);for(int i=0;i<1<<n;i++)p[i]=mul(p[i],s);for(int i=1;i<1<<n;i++)a[i]=mod-1;a[0]=(1<<n)-1;p[0]=sub(p[0],1);FWT(a,1<<n,1),FWT(p,1<<n,1);for(int i=0;i<1<<n;i++)a[i]=mul(a[i],qpow(p[i],mod-2));FWT(a,1<<n,-1);for(int i=0;i<1<<n;i++){printf("%d\n",sub(a[i],a[0]));}
}

转载于:https://www.cnblogs.com/weiyanpeng/p/11005606.html

AGC034 F - RNG and XOR相关推荐

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

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

  2. 【NWPU2018 练着玩】入门班day1 枚举贪心[Cloned] F - Claris and XOR (HDU-5661 Claris and XOR )

    题目链接:https://vjudge.net/contest/246949#problem/F 先参考大佬的博客: https://blog.csdn.net/idealism_xxm/articl ...

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

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

  4. AT4996-[AGC034F]RNG and XOR【FWT,生成函数】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4996 题目大意 给出一个0∼2n−10\sim 2^n-10∼2n−1下标的数组ppp,pip_ipi​表示有 ...

  5. 【AtCoder】AGC034

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

  6. mt19937是什么鬼?

    今天看一个C++的例子,突然看到这个mt19937,起先还以为是什么地方搞错了,怎么会有这个怪的名称呢?这个名称是mt1937? 代表1937年?心里一开始有这个疑问.代码如下: std::rando ...

  7. GOOD BYE OI

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

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

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

  9. 【SCOI 2008】奖励关

    Problem Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关. 在这个奖励关里,系统将依次随机抛出 \(k\) 次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之 ...

最新文章

  1. 大盘点|YOLO 系目标检测算法总览
  2. 为什么我们使用Nginx而不是Apache?
  3. Vista下硬盘管理
  4. c/c++中typedef与函数指针
  5. oracle数据库的导入导出
  6. ios上架图片在线制作_不同风格gif在线制作,公众号动态图片制作方法
  7. Java成神之路——CountDownLatch、CyclicBarrier
  8. MySQL数据类型不一致_数据类型不一致导致的SQL不走索引
  9. python filter map区别_Python:map()、reduce()、filter()的区别
  10. 太惨!学Python方法用错,直接从入门到放弃!
  11. 优化更新语句中的标量子查询
  12. dubbo调用服务出现如下异常
  13. 如何使用Wondershare PDFelement制作PDF文件
  14. SQL Server 2014 软件安装教程
  15. 操作系统学习之windows发展史
  16. 学习笔记 | 非负矩阵分解(NMF)浅析
  17. U3D游戏开发效率和UE4相比哪个高?
  18. unity中Game视图中实现和Scene视图中一样的摄像机操作
  19. MySQL自定义函数创建与使用总结
  20. 树莓派之更改开机画面

热门文章

  1. 微服务容器化最短路径,微服务 on Serverless 最佳实践
  2. 2021阿里云“API满意度”调研
  3. 如何降低微服务测试成本?
  4. 如何让一套代码适配所有iOS设备尺寸?
  5. 计算机网络传输复用技术,计算机网络 23-24 复用技术 数字传输.ppt
  6. 【实施工程师】ARP——地址解析协议(高清版本)
  7. MariaDB [Warning] Could not increase number of max_open_files to more than 1024
  8. mysql 终止 存储过程
  9. 《追风行动》有点儿意思
  10. poj3683 Priest John's Busiest Day