Hello 2019

Posted sovietpower

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hello 2019相关的知识,希望对你有一定的参考价值。


比赛链接

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

ABC代码没在本地(而且懒),就不放了...
(然而当时C题FST了真是想...= =)

D.Makoto and a Blackboard

(Description)
给定(n,k)。每次(n)会等概率地变成自己的一个约数(包括(1,n)),求变化(k)次后(n)期望是多少。
(nleq10^{15}, kleq10^4)

(Solution)
(n)质因数分解,(n=p_1^{a_1}p_2^{a_2}...p_k^{a_k}),每次变化后每个质因子的次数(a_i)会随机变成(0sim a_i)中的一个数,且每个(a_i)的变化是独立的。
所以可以对每个质因子分别计算期望,最后乘起来。
(f[i][j])表示(i)次变化后,(a)变成(j)的概率,(f[0][a]=1)
转移就是(f[i][j]=sum_{k=j}^afrac{f[i-1][k]}{k+1})
把所有质因数都算一遍,乘起来就好了。
质因子个数、次数都是(log)级别的(其实乘起来也就(log)级别?),所以复杂度是(O(klog^2n))(其实也就是(O(klog 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)|ain y,bin z})
(4 x v):询问第(x)个集合中,数字(v)出现次数模(2)后的值。
(nleq10^5, qleq10^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),而(1equiv-1(mod 2)),所以直接把(mu(i*x) eq0)的这些位置上的值加起来就好,也就是全与起来再模(2)
这样每次操作的复杂度都是(O(frac{7000}{w}))

G.

H.

以上是关于Hello 2019的主要内容,如果未能解决你的问题,请参考以下文章

如何从URL获取片段标识符(hash#之后的值)?

Visual Studio 2012-2019的130多个jQuery代码片段。

sublime代码片段

sublime text3 增加代码片段(snipper)

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

[linux][c/c++]代码片段02