January Challenge 2021 Division 1
这场我是先用小号打的div3,然后凑了七题才交的div1,所以下面部分时间实际上div3AC的时间
Chef and Ants(1.2)
Expected Number of SCCs(1.3)
Guess the Tiling(1.8)
Blackjack(1.2)
And-Or Game(1.3)
Cool Subsets(1.4)
Sequence Creation(1.9)
Curious Matrix(1.6)
Stack-Queue Sort
Greedy Students
达成新成就:
第一次在Challenge题上拿到了分(虽然只有可怜的4分)
挑几题讲讲
Sequence Creation
结论:对于两个长度为\(m\)的序列\(\{A\},\{B\}\),其构成合法序列的充要条件是:\(A_i\)与\(B_i\)之间连边,不存在某个连通块有两个及以上的环
至于计数,很简单,可以自己思考一下
对于\(M_i\),可以发现随着\(i\)的减小,右端点是不增的,故这部分移动是\(O(1)\)的
然后可以用lct维护基环树
Curious Matrix
结论:对于一个\(n\times n\)的矩阵满足题目要求,充要条件是:所有\(2\times 2\)的子矩阵行列式为\(p\)的倍数
证明显然
令\(a_{1,1}=key\),\(x_i=a_{1,i}(i\neq 1)\),\(y_i=a_{i,1}(i\neq 1)\)
很容易发现\(a_{i,j}=x_j\cdot y_i\cdot key^{-1}(i\ge 2,j\ge 2)\)
很容易想到并查集维护
先考虑\(O(n^2logn)\)的方法(\(logn\)是并查集的因子),容易用线段树实现\(O(nlog^2n)\)
这里的并查集与之前我写过的均不同,思考了将近一天,最后在与emofunc神仙交流的时候突然迸发出的灵感
我们不需要维护所有点的值,如果要维护的话,需要维护\(x_i\)与\(x_i\cdot key^{-1}\),甚至\(x_i\cdot key\),非常不好写,我写了将近8k,然后交上去全WA
对于一个连通块,若某个\(x_i\)是已知的,则其他\(x_j\)都可以通过其判断是否合法
对于一个连通块,若某个\(x_i,y_j\)是已知的,则\(key\)可以解出来
计数比较简单,自己思考一下吧