首页 > 其他 > 详细

Hello 2019

时间:2019-02-03 10:22:06      阅读:123      评论:0      收藏:0      [点我收藏+]

比赛链接

咕咕了一个月...终于闲的没事想起补了...

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.

Hello 2019

原文:https://www.cnblogs.com/SovietPower/p/10349515.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!