T1
一个随机数生成器会随机生成 [0,n) 之间的整数。给定 m 个互不相同的整数 ai,如果某一次生成的数在这 m 个数当中就停止,否则继续下一次生成。求生成的所有数之和的期望。
1≤m≤n≤107,0≤ai<n。
发动技能「自信」,认为答案和 ai 无关。
考虑设 f(i) 表示在第 i 次生成后停止的第 i 个数的期望贡献。则有
f(i)=(nn−m)i−1×2n−1
那么答案就是
i=1∑∞f(i)=2n−1i=1∑∞(nn−m)i−1
等比数列求和得到
2mn(n−1)
时间复杂度 O(1)。
T4
一个比较 tricky 的题目。
这些操作都比较难用普通的线段树操作来维护,介绍一个线段树维护矩阵的技巧。
我们把一个点看成行向量 (x,y,1),对所有操作分别构造转移矩阵。
- 平移,相当于 (x,y)→(x+p,y+q)。
(xy1)⎝⎛10p01q001⎠⎞=(x+py+q1)
- 沿 x 轴翻转,相当于 (x,y)→(x,−y)。
(xy1)⎝⎛1000−10001⎠⎞=(x−y1)
- 沿 y 轴翻转,相当于 (x,y)→(,−xy)。
(xy1)⎝⎛−100010001⎠⎞=(−xy1)
- 沿 y=x 翻转,相当于 (x,y)→(y,x)。
(xy1)⎝⎛010100001⎠⎞=(yx1)
- 逆时针旋转 α,相当于 (x,y)→(xcosα−ysinα,xsinα+ycosα)。
(xy1)⎝⎛cosα−sinα0sinαcosα0001⎠⎞=(xcosα−ysinαxsinα+ycosα1)
线段树维护转移矩阵乘法即可。
时间复杂度 O(nlogn)。矩阵乘法自带大常数,但是可以接受。