这两天的模拟赛是 GDKOI。
D1T1 和 D2T1 都是大水题,不仅简单而且数据水,放过了许多错解。
D1T2 和 D2T2 是困难题,D1T3 和 D2T3 是可做题。听说 D2T3 用到的是一个冬令营介绍的 separator 科技,D2T2 用到了一个非常冷门的 BM 线性递推。目前我只懂了 D1T3 和 D2T3,另外两题只会暴力。考场上唯二(还是唯三,忘了)做出 D1T2 的其中之一是一位初一的 Au 巨佬,他讲的方法虽然比较通俗但我听完就忘了。
D1T1 矩阵
\(O(n^2)\) 判断 \(n\times n\) 的矩阵 \(A\times B\) 是否 \(=C\)。
正解是随一个 \(1\times n\) 向量 \(\bm v\) 去分别乘以等式左右,判断等号是否成立。我的做法是:由于 \(A\times B\) 的暴力矩乘可以这样写:
for(i,1,n)for(j,1,n)for(k,1,n)c[i][k]-=a[i][j]*b[j][k];
然后判断 c
是否是全零矩阵。所以可以直接哈希掉 \(c\) 和 \(b\) 的每一行,这样就不用枚举 \(k\) 了。
D1T2
求满足 \(\forall i\le m,p_i>m;\forall m+1\le i\le n,p_i\ne i\) 的 排列 \(\{p_n\}\) 的方案数。\(n\le 200000\)
略。
D1T3
给定 \(n,m,c(n\le 15,m\le n(n-1)/2,c\le 10^{18})\)、序列 \(\{a_n\}\)、二元组序列 \(\{(u_m,v_m)\}\),求有多少个序列 \(\{b_n\}\),满足:
- \(\forall i\in [1,n]0\le b_i\le a_i\)
- \(\bigoplus b_i = c\)
- \(\forall i\in [1,m]b_{u_i}\ne b_{v_i}\)
DP 求点集容斥系数。容斥。订完再来写。