题目
链接:https://ac.nowcoder.com/acm/contest/10662
A Matrix Equation (高斯消元)
题意:给定两个 n × n n \times n n×n 的矩阵 A A A 和 B B B,问有多少种矩阵 C C C 使得 A × C = B ⊙ C A×C=B⊙C A×C=B⊙C 成立。
思路:可以发现 C 中每一列都是独立的。设 C 中的每一列中的每一个元素为一个变量,可以得到一个新的矩阵
a
11
c
1
+
a
12
c
2
+
⋯
+
a
1
n
c
n
=
b
1
c
1
a_{11}c1+a_{12}c2+\dots+ a_{1n}c_n=b_1c_1
a11c1+a12c2+⋯+a1ncn=b1c1
a
21
c
1
+
a
22
c
2
+
⋯
+
a
2
n
c
n
=
b
2
c
2
a_{21}c1+a_{22}c2+\dots+ a_{2n}c_n=b_2c_2
a21c1+a22c2+⋯+a2ncn=b2c2
…
\dots
…
a
n
1
c
1
+
a
n
2
c
2
+
⋯
+
a
n
n
c
n
=
b
n
c
n
a_{n1}c1+a_{n2}c2+\dots+ a_{nn}c_n=b_nc_n
an1c1+an2c2+⋯+anncn=bncn
对这个矩阵高斯消元,就可以得到当前列的自由变元的数量。
C Stone Game(签到中的签到)
D Fight against involution (签到)
思路:可以得到几个贪心关系
- 遇到这种左右区间的,可以按右区间排序
- 右区间相同的,左边也得取相同的,否则会不相同。
- 右区间大的,那么贪心的取值,也一定大于右区间小的。
G Xor Transformation(签到中的签到)
J Tree Constructer (二分图 + 构造)
题意:一个图上,如果存在两个点的点权 a i ∣ a j = 2 60 − 1 a_i | a_j =2^{60}-1 ai∣aj=260−1,那么点 i i i 和 j j j 就存在一条边。给定一棵树,请你构造点权,使得满足上述条件。 ( 1 ≤ n ≤ 100 ) (1\le n \le 100) (1≤n≤100)
思路:需要构造一些点权,使得只有树上有边的两点,或操作之后等于 2 60 − 1 2^{60}-1 260−1
- 可以想到是一个二分图。然后分成钥匙和锁的关系。设为白点和黑点
- 白点第 59 位取 0,第 id 位取 0,其他位取 1 。(白点的数量要少于黑点)
- 黑点第 59 位取 1, 与黑点相连的白点的 id 位取 1 ,其余位取 0 。
- 白点第 59 位取 0 是为了防止白点和白点之间产生边。
- 而黑点就相当于钥匙,只有与相连的白点的 id 的位置,才取 1 。这样可以保证黑点之间不会产生边,然后黑点和其他 id 的白点之间,也不会产生边。
L Bit Sequence (数位DP)
思路:m 最多只有 100,x + m 最多只能影响低 6 位,7位以上只会产生进位,所以后面只需要判断是否会进位即可。
- 利用数位DP,将每一个数都枚举到最后一位。然后 O(m) 判断这个 x 是否符合答案。
- 到最后我们需要判断的其实就是奇偶性。
- 利用数位DP,维护三个数:x 低 6 位的取值,6位之后连续的 1 的奇偶性(会产生进位),6 位之后所有的数的奇偶性。
总结:利用了 m 的数据范围,(1)对 x 进位产生的影响只有低 7 位,7 位之后只能进位 (2)可以直接暴力判断。