Problem
N行M列,共N*M个摊位,其中有T个是有价值的(即喜爱的)。每次可以交换相邻两个摊位(每一行或每一列最后一个位置也算相邻)。现在想要各行中有价值的摊位数相同,各列中有价值的摊位数也要相同。求最少的交换次数。
Solution
首先,同一列中的交换只会影响行,同一行中的交换只会影响列。所以我们可以分开考虑行与列这两个问题。我做题时有一个疑问——空间结构会不会影响交换呢?如果两列中在同一行均有喜爱摊位,是不可以交换的。emmm,自己画个图就会发现我多虑了。
那若是只考虑行(或列),我们自然而然联想到环形均分纸牌模型——每行(或列)原始所含有的喜爱摊位数量为初值,相邻两个行(或列)可以互相给,要求给的摊次最少。进而,设个未知数,列个方程,利用绝对值不等式得出结论,就可以用中位数解决了(hzwer学长在2656中已经写过,就不再多说了)。复杂度O(nlogn + mlogm)。