题目链接
题目类型:找规律
题目来源:2016年多校Round3
题目分析
题目大意
给定nm的矩阵,每个位置的值只会为{0, 1, 2}中的一个。当选择一个点时,该点会自增2,周围四个方向的点(如果存在的话)会自增1,当其大于等于3时,会自动对3取模,问在选择小于2\n*m个点,如何使这个矩阵变为0?
解析
比赛时想的比较复杂,想去枚举点用dfs去跑,O(n3m3)不会T真的很神奇,900^3大概是7.29*108,理论上会T。
实际上使用最简单的解决多元方程的方法即可。那么要怎么建立方程组呢?对于每一个下标为p的点,如果该点选择1次,本身会自增2,当其周围的点下标分别为l, r, u ,d,当这四个点共计选择k次的话,该点本身也会自增k,当p点位置本身值为s时,我们希望该点选择(3-k)%3次。那么我们就可以设这nm个点各被选择了x1,x2,x3…x(n\m)次,然后对于每一个点找到对应的几个未知数累加求解即可。至于为何要选择(3-k)%3,对于一个点来讲,如果我可以让他自增4次,为什么不能让他自增1次呢?以及多元方程组为什么不会出现负数,这点小弟无法证明,如有大神幸临小站,还望指点。
代码
1 | /* |