目录
- D.Makoto and a Blackboard
- E.
- F.Alex and a TV Show
- G.
- H.
比赛链接
咕咕了一个月...终于闲的没事想起补了...
ABC代码没在本地(而且懒),就不放了...
(然而当时C题FST了真是想...= =)
D.Makoto and a Blackboard
\(Description\)
给定\(n,k\)。每次\(n\)会等概率地变成自己的一个约数(包括\(1,n\)),求变化\(k\)次后\(n\)期望是多少。
\(n\leq10^{15},\ k\leq10^4\)。
\(Solution\)
将\(n\)质因数分解,\(n=p_1^{a_1}p_2^{a_2}...p_k^{a_k}\),每次变化后每个质因子的次数\(a_i\)会随机变成\(0\sim a_i\)中的一个数,且每个\(a_i\)的变化是独立的。
所以可以对每个质因子分别计算期望,最后乘起来。
令\(f[i][j]\)表示\(i\)次变化后,\(a\)变成\(j\)的概率,\(f[0][a]=1\)。
转移就是\(f[i][j]=\sum_{k=j}^a\frac{f[i-1][k]}{k+1}\)。
把所有质因数都算一遍,乘起来就好了。
质因子个数、次数都是\(\log\)级别的(其实乘起来也就\(\log\)级别?),所以复杂度是\(O(k\log^2n)\)(其实也就是\(O(k\log n)\)?)。
E.
F.Alex and a TV Show
\(Description\)
有\(n\)个多重集合,初始都为空。有\(q\)次操作,操作共四种:
\(1\ x\ v\):将第\(x\)个集合赋值为\(\{v\}\)。
\(2\ x\ y\ z\):把第\(x\)个集合设为第\(y\)个集合与第\(z\)个集合的并。
\(3\ x\ y\ z\):把第\(x\)个集合设为\(\{\gcd(a,b)|a\in y,b\in z\}\)。
\(4\ x\ v\):询问第\(x\)个集合中,数字\(v\)出现次数模\(2\)后的值。
\(n\leq10^5,\ q\leq10^6\),出现的所有数字均为正整数且\(\leq7000\)。
\(Solution\)
先考虑第三个类似卷积的操作如何处理。题解用到了类似\(FFT\)的方法,将“卷积”转化成对应位置的“点值”分别进行运算。
在\(x\)位置处,不去维护数字\(x\)的出现次数,而是维护\(x\)所有倍数的出现次数。这样就可以对不同位置的点值分别维护“\(\gcd\)卷积”啦。
比如\(y\)集合中\(x\)的倍数有\(a\)个,\(z\)集合中\(x\)的倍数有\(b\)个,那么“卷积”之后\(x\)的倍数就有\(a*b\)个(而且这个\(a,b\)与其它位置的值互不影响)。
具体实现,因为只需要判断奇偶性,拿一个大小为\(7000\)的\(bitset\ A_i\)。操作二就是\(A_y\ ^{\wedge}A_z\)(加),操作三就是\(A_y\&A_z\)(乘)。
但是查询的时候需要容斥:\(Ans=A_x-A_{2x}-A_{3x}+A_{6x}\)...注意到容斥系数只有\(\mu=1\)或\(-1\),而\(1\equiv-1(mod\ 2)\),所以直接把\(\mu(i*x)\neq0\)的这些位置上的值加起来就好,也就是全与起来再模\(2\)。
这样每次操作的复杂度都是\(O(\frac{7000}{w})\)。
G.
H.
原文地址:https://www.cnblogs.com/SovietPower/p/10349515.html