P10831

我觉得这个做法非常厉害,不同于题解做法,我在模拟赛场上对着高斯消元硬随机在最后三分钟通过了这道题。

首先所有询问等价于解一个线性方程组,我很长一段时间都认为 \(3400\) 次询问的矩阵大小为 \(3400\times 4950\),解空间维数为 \(4950-3400\),不可能存在少于 \(4950\) 次的做法。先来看一下 \(4950\) 次的做法,我们构造一个 \(4950\times 4950\) 的系数矩阵,使得这个系数矩阵满秩,一个大体的思路是使得 \((i,i)\) 这个位置是一个主元,同时消元过程中不要出现行交换。通过随机化可以构造出这么一个系数矩阵。询问的时候对于每一行的三个数问一下即可。期望得分 \(60\) 分。消元的时候由于值不为 \(0\) 的位置不多,可以低于 \(O(4950^3)\) 进行高斯消元。

注意到这个题的解都是为 \(01\) 的整数,因此不能按照一般高斯消元的方法分析。每次询问若返回 \(3\)\(0\),那我们可以直接删去系数矩阵的这一行和对应的三列,感受一下若将标号复合上一个随机置换,则得到 \(3\)\(0\) 的概率可以接受。于是询问每一行的时候若这一行三个数都被确定,那么就跳过这一行。所有询问结束后提取出所有没被删去的位置,对这个矩阵做高斯消元,感受一下,由于随机化,直接维护值不为 \(0\) 的位置进行高斯消元看上去就很对。期望得分 \(84\) 分。

上面那个做法大概会比满分多 \(200\) 次询问,已经很接近了。我们想进一步提高删去行的数量,若一行只有一个变量没被问出来,那么问这一行很劣,于是想到每次找出未定元最多的行进行询问,这样大概耗费 \(3000\) 次询问,可以获得满分。

时间复杂度不会证,正确率不会证。

posted @ 2025-08-06 16:16  BYR_KKK  阅读(30)  评论(3)    收藏  举报