翻转矩形位

时间:2013-12-07 14:23:31

标签: algorithm

翻转世界是一场游戏。在该游戏中,给出了大小为N * M的矩阵,其由数字组成。每个数字只能是1或0。行的编号从1到N,列的编号从1到M.

以下步骤可以称为单一动作。

选择两个整数x,y(1 <= x <= N且1&lt; = y <= M),即矩阵上的一个正方形。

由(1,1)和(x,y)表示的矩形中的所有整数,即具有左上和右下点为(1,1)和(x,y)的矩形被切换(1是0和0是1)。

例如,在该矩阵中(N = 4且M = 3)

101
110
101
000

如果我们选择x = 3且y = 2,则矩阵的新状态将为

011
000
011
000

对于给定的矩阵状态,游戏的目标是将矩阵缩减到所有数字为1的状态。所需的最小移动次数是多少。

如何解决这个问题?

这不是一个家庭作业的问题。我很困惑。我在过去的两天里一直在与这个问题作斗争。并且维持一个2-D阵列的数量为1和0。 我尝试平衡一个零的数量和零的数量。但是没有成功。任何提示或解决方案。 ?

来源:Hackerearth

1 个答案:

答案 0 :(得分:0)

提示#1:从下到上使用贪婪的方法。即:如果单元格(n,m)为0,则必须将XOR应用于矩形(0,0) - (n,m)。因此,尝试从底部到顶部以及从右到左遍历所有单元格,如果当前单元格为零,则对其执行移动。

这产生O(n ^ 4)解。

要获得n ^ 2解决方案,例如,使用每个矩形中的累计总和。