Atcoder Grand Contest 034 F - RNG and XOR(FWT)
tsc 考试前 A 的题了,结果到现在才写这篇题解……为了 2mol 我已经一周没碰键盘了,现在 2mol 结束算是可以短暂的春天 短暂地卷一会儿 OI 了((
u1s1 写这篇题解的时候我连题都快忘了。。。
首先设 \(b_i=\dfrac{A_i}{\sum\limits_{j=0}^{2^n-1}A_j}\),其次碰到这种期望类的题目我们考虑套路地设 \(p_i\) 表示异或得到 \(i\) 的概率,那么有 \(p_i=\sum\limits_{j=0}^{2^n-1}p_jb_{i\oplus j}+1\),\(p_0=0\)。这个状态定义是存在后效性的,而高斯消元 \(8^n\) 又显然会超时,因此考虑从这个转移式本身入手进行优化。注意到这个转移式长得有点像异或卷积,因此考虑用异或卷积的形式将这个式子写出来,即 \(p=p\times b+I\),其中 \(\forall i,I_i=1\),异常好理解。
不过事实上这个式子是有个 bug 的,\(p_0=0\),而将 \(p_0\) 带到右边去就不一定等于 \(0\) 了,也就是说左边实际上要加上一个常数 \(X\),即 \(p+X=p\times b+I(X\in\mathbb{R})\)(事实上很多生成函数的题也需要注意常数项的问题,比如说斐波那契数列,这里就不再赘述了)。怎么求这个 \(X\) 的值呢?这里又是一个套路,将左边每一项都变成它的系数和,相当于多项式里的令 \(x=1\),那么可以得到 \((\sum\limits_{i=0}^{2^n-1}p_i)+X=(\sum\limits_{i=0}^{2^n-1}p_i)\times (\sum\limits_{i=0}^{2^n-1}b_i)+(\sum\limits_{i=0}^{2^n-1}I_i)\),而显然 \(\sum\limits_{i=0}^{2^n-1}b_i=1\),故 \(X=\sum\limits_{i=0}^{2^n-1}I_i=2^n\),因此 \(p+2^n=p\times b+I\),简单移个项可得 \(2^n-I=p\times(b-1)\),故 \(p=\dfrac{2^n-I}{b-1}\),把上下两个幂级数 FWTxor 一下相除再 FWTxor 回去即可得到 \(p\)。
还有一个小问题,就是在求逆元的时候有可能会出现分母为 \(0\) 的情况。事实上,由于 \(A_i\le 1000\),因此从所有 \(b_i\) 中任意选出一些出来它们的分子分母都 \(<998244353\),记 \(F=\text{FWT}(b-1)\),那么必然有 \(F_i\le 0(i\ne 0)\),而 \(F_0=-1+\sum\limits_{i=0}^{2^n-1}b_i=0\),因此出错的只可能是 \(F_0\)。不过这个问题很好解决,我们已知 \(p_0=0\),而显然对于一个幂级数 \(F\) FWTxor 后得到的幂级数 \(G\),常数项上加上一个常数 \(C\) 对于 \(F\) 的作用效果就是每一项都加上 \(C\),因此我们只需输出 \(p_i-p_0\) 即可。
const int MAXP=1<<18;
const int MOD=998244353;
int qpow(int x,int e=MOD-2){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
int n,a[MAXP+5],b[MAXP+5],c[MAXP+5];
void FWTxor(int *a,int len,int type){
for(int i=2;i<=len;i<<=1)
for(int j=0;j<len;j+=i)
for(int k=0;k<(i>>1);k++){
int X=a[j+k],Y=a[(i>>1)+j+k];
a[j+k]=1ll*(X+Y)*type%MOD;
a[(i>>1)+j+k]=1ll*(X-Y+MOD)*type%MOD;
}
}
int main(){
scanf("%d",&n);n=1<<n;int sum=0;
for(int i=0;i<n;i++) scanf("%d",&a[i]),sum+=a[i];sum=qpow(sum);
for(int i=0;i<n;i++) a[i]=1ll*a[i]*sum%MOD;a[0]=(a[0]-1+MOD)%MOD;
for(int i=0;i<n;i++) b[i]=MOD-1;b[0]=(b[0]+n)%MOD;
FWTxor(a,n,1);FWTxor(b,n,1);
for(int i=0;i<n;i++) c[i]=1ll*b[i]*qpow(a[i])%MOD;
FWTxor(c,n,MOD+1>>1);
for(int i=0;i<n;i++) printf("%d\n",(c[i]-c[0]+MOD)%MOD);
return 0;
}
Atcoder Grand Contest 034 F - RNG and XOR(FWT)的更多相关文章
- Atcoder Grand Contest 030 F - Permutation and Minimum(DP)
洛谷题面传送门 & Atcoder 题面传送门 12 天以前做的题了,到现在才补/yun 做了一晚上+一早上终于 AC 了,写篇题解纪念一下 首先考虑如果全是 \(-1\) 怎么处理.由于我 ...
- Atcoder Grand Contest 003 F - Fraction of Fractal(矩阵乘法)
Atcoder 题面传送门 & 洛谷题面传送门 Yet another AGC F,然鹅这次就没能自己想出来了-- 首先需注意到题目中有一个条件叫做"黑格子组成的连通块是四联通的&q ...
- Atcoder Grand Contest 016 F - Games on DAG(状压 dp)
洛谷题面传送门 & Atcoder 题面传送门 如何看待 tzc 补他一个月前做的题目的题解 首先根据 SG 定理先手必输当且仅当 \(\text{SG}(1)=\text{SG}(2)\). ...
- Atcoder Grand Contest 010 C - Cleaning 树贪心(伪)
C - Cleaning 题目连接: http://agc010.contest.atcoder.jp/tasks/agc010_c Description There is a tree with ...
- Atcoder Grand Contest 001 D - Arrays and Palindrome(构造)
Atcoder 题面传送门 洛谷题面传送门 又是道思维题,又是道把我搞自闭的题. 首先考虑对于固定的 \(a_1,a_2,\dots,a_n;b_1,b_2,\dots,b_m\) 怎样判定是否合法, ...
- Atcoder Grand Contest 024 E - Sequence Growing Hard(dp+思维)
题目传送门 典型的 Atcoder 风格的计数 dp. 题目可以转化为每次在序列中插入一个 \([1,k]\) 的数,共操作 \(n\) 次,满足后一个序列的字典序严格大于前一个序列,问有多少种操作序 ...
- Atcoder Grand Contest 008 E - Next or Nextnext(乱搞+找性质)
Atcoder 题面传送门 & 洛谷题面传送门 震惊,我竟然能独立切掉 AGC E 难度的思维题! hb:nb tea 一道 感觉此题就是找性质,找性质,再找性质( 首先看到排列有关的问题,我 ...
- AtCoder Grand Contest 002 F:Leftmost Ball
题目传送门:https://agc002.contest.atcoder.jp/tasks/agc002_f 题目翻译 你有\(n*k\)个球,这些球一共有\(n\)种颜色,每种颜色有\(k\)个,然 ...
- AtCoder Grand Contest 017 F - Zigzag
题目传送门:https://agc017.contest.atcoder.jp/tasks/agc017_f 题目大意: 找出\(m\)个长度为\(n\)的二进制数,定义两个二进制数的大小关系如下:若 ...
随机推荐
- Shiro反序列化的检测与利用
1. 前言 Shiro 是 Apache 旗下的一个用于权限管理的开源框架,提供开箱即用的身份验证.授权.密码套件和会话管理等功能. 2. 环境搭建 环境搭建vulhub 3. 如何发现 第一种情况 ...
- UltraSoft - Beta - Scrum Meeting 8
Date: May 24th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 记录Scrum Meeting Liuzh 前端 暂无 Kkkk 前端 暂无 王f ...
- 第4次 Beta Scrum Meeting
本次会议为Beta阶段第4次Scrum Meeting会议 会议概要 会议时间:2021年6月4日 会议地点:「腾讯会议」线上进行 会议时长:0.5小时 会议内容简介:对完成工作进行阶段性汇报:对下一 ...
- OO2020 助教工作总结
1 我的初衷 这一学期的OO助教工作是我一段宝贵的经历,在其中我学习了很多.见识了很多,收获满满.当时报名OO的初衷主要有三方面.首先,我想说OO是我所上过的最好的一门课之一,这门课有这一套从理论讲授 ...
- Taylor公式原来可以这么简单
1.Taylor公式 解决:含有高阶导数的中值定理或定积分.极限运算等题目 条件:f(x)在x=x0领域内(n+1)阶可导 结论:f(x)=Pn(x)+Rn(x) 2.x和x0的取值 3.Taylor ...
- RGB-YUV
1,RGB 1.1 RGB说明 RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通 ...
- Codeforces Round #735 (Div. 2)
这次的cf依旧掉分..... A题和B题在不懈死磕下瞎搞出来了,不过还是被C题卡住了... C. Mikasa 简述题意就是给定n和m,让n^0,n^1,n^2...,n^m,求着m+1个数中没有出现 ...
- 面试题系列:工作5年,第一次这么清醒的理解final关键字?
面试题:用过final关键字吗?它有什么作用 面试考察点 考察目的: 了解面试者对Java基础知识的理解 考察人群: 工作1-5年,工作年限越高,对于基础知识理解的深度就越高. 背景知识 final关 ...
- java实现rsa加密算法【5min快速应用教程】
该篇文章的主要目的是让读者能够迅速应用到项目中,想要了解详细的rsa加密算法的,可以百度找到更多原理.深度分析的文章. RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一 ...
- Linux ps -ef 命令输出解释
UID: 程序拥有者PID:程序的 IDPPID:程序父级程序的 IDC: CPU 使用的百分比STIME: 程序的启动时间TTY: 登录终端TIME : 程序使用掉 CPU 的时间CMD: 下达的 ...