牛客挑战赛43
A.序列划分
- 求和即可。
B.集合操作
- 可以发现从前往后删除,观察DP转移发现就是组合数。
C.最优公式
-
因为没有发现答案输出要取模所以没过。
-
可以
打表发现性质, a = b a=b a=b,然后三分判断,是两个log的。 -
考虑 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x1,y1),(x2,y2) (x1,y1),(x2,y2)的曼哈顿距离 ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ = m a x ( ∣ x 1 − x 2 + y 1 − y 2 ∣ , ∣ x 1 − x 2 + y 2 − y 1 ∣ ) |x1-x2|+|y1-y2|=max(|x1-x2+y1-y2|,|x1-x2+y2-y1|) ∣x1−x2∣+∣y1−y2∣=max(∣x1−x2+y1−y2∣,∣x1−x2+y2−y1∣)
-
那么如果 A i = x 1 + y 1 , A j = x 1 − y 1 , a = x 2 + y 2 , b = x 2 − y 2 A_i=x1+y1,A_j=x1-y1,a=x2+y2,b=x2-y2 Ai=x1+y1,Aj=x1−y1,a=x2+y2,b=x2−y2,上面的式子的形式就是我们要求的东西了。
-
考虑 x 1 = ( A i + A j ) / 2 , y 1 = ( A i − A j ) / 2 x1=(A_i+A_j)/2,y1=(A_i-A_j)/2 x1=(Ai+Aj)/2,y1=(Ai−Aj)/2,两维拆开分别取中位数就是 x 2 , y 2 x2,y2 x2,y2了,由于第二维显然中位数是0,所以 y 2 = ( a − b ) / 2 = 0 y2=(a-b)/2=0 y2=(a−b)/2=0。
-
然后二分第一维的中位数即可做到 n l o g n nlogn nlogn
D.数组操作
- 考虑生成函数,由于是组合起来的,所以是指数型生成函数,把 n n n个数的生成函数乘起来即可。
- 对于 i i i设 A A A变为0的操作个数, B B B表示变为 1 1 1的操作个数,那么它的生成函数就是 F ( x ) = [ a i = 0 ] + A x / 1 ! + ( A + B ) A x 2 / 2 ! + ( A + B ) 2 A x 3 / 3 ! . . . = A e ( A + B ) x A + B + [ a i = 0 ] F(x)=[a_i=0]+Ax/1!+(A+B)Ax^2/2!+(A+B)^2Ax^3/3!...=\frac{Ae^{(A+B)x}}{A+B}+[a_i=0] F(x)=[ai=0]+Ax/1!+(A+B)Ax2/2!+(A+B)2Ax3/3!...=A+BAe(A+B)x+[ai=0]
- 把 e ( A + B ) x e^{(A+B)x} e(A+B)x换成 x A + B x^{A+B} xA+B,然后启发式合并即可两个log完成这题。
E.下落的小球
- 考虑线段相交,保留最下面的交点,以及对于所有询问和线段下端点求下面第一个碰到的线段即可。
- 扫描线即可。
F.矩阵与排列
- 显然可以把它变成一个图上的问题。考虑最后1到1的路径,我们需要在 n n n个1矩形中各选一条边,然后以一个排列的顺序组合在一起,最后连成1到1的一条欧拉回路。
- 对于欧拉回路计数,有一个BEST定理:
- 对于一个所有点出度=入度的连通有向图, d e g [ i ] deg[i] deg[i]为 i i i的出度, T T T为某个点为起点的外向树个数,则有欧拉回路个数为: A n s = T ∗ ∏ i = 1 n ( d e g [ i ] − 1 ) ! Ans=T*\prod_{i=1}^n{(deg[i]-1)!} Ans=T∗∏i=1n(deg[i]−1)!
- 如果把 T T T改成内向树, d e g deg deg改成入度也是可以的,任意一个点为起点都是可以的。
- 证明考虑构造:
- 首先起点钦定一条边为初始边避免算重,对于除了外向树上以外的边,在每一个点上钦定一个顺序,贡献: ( d e g [ i ] − 1 ) ! (deg[i]-1)! (deg[i]−1)!
- 从起点的初始边出发,对于当前点,先走外向树上的边,再按照钦定的顺序走边。
- 显然这样走出来的一定是欧拉回路。
- 反过来也是一样的,对于一个欧拉回路一定对应一个外向树。
- 一般的图的外向树计数我们可以考虑矩阵树定理,外向树就用出度矩阵-邻接矩阵,然后挖掉 s s s行 s s s列的余子式,内向树就是入度矩阵-邻接矩阵(注意邻接矩阵上是有向边)
- 那么这题就直接 f ( i , d 1 , g 1 , d 2 , g 2 , k ) f(i,d1,g1,d2,g2,k) f(i,d1,g1,d2,g2,k)转移就好了, d 1 , d 2 d1,d2 d1,d2为 1 , 2 1,2 1,2入度, g 1 , g 2 g1,g2 g1,g2为 1 , 2 1,2 1,2出度, i i i表示加了多少边, k k k表示当前选择的外向树的形态。
- n 5 ∗ 9 ∗ 6 n^5*9*6 n5∗9∗6, 6 6 6种外向树, 9 9 9种转移。
- 实际上达不到上界,还是可以跑的。