1. 程式人生 > >七夕祭(bzoj3032許可權題,同codevs2485)

七夕祭(bzoj3032許可權題,同codevs2485)

Problem

N行M列,共N*M個攤位,其中有T個是有價值的(即喜愛的)。每次可以交換相鄰兩個攤位(每一行或每一列最後一個位置也算相鄰)。現在想要各行中有價值的攤位數相同,各列中有價值的攤位數也要相同。求最少的交換次數。

Solution

首先,同一列中的交換隻會影響行,同一行中的交換隻會影響列。所以我們可以分開考慮行與列這兩個問題。我做題時有一個疑問——空間結構會不會影響交換呢?如果兩列中在同一行均有喜愛攤位,是不可以交換的。emmm,自己畫個圖就會發現我多慮了。

那若是隻考慮行(或列),我們自然而然聯想到環形均分紙牌模型——每行(或列)原始所含有的喜愛攤位數量為初值,相鄰兩個行(或列)可以互相給,要求給的攤次最少。進而,設個未知數,列個方程,利用絕對值不等式得出結論,就可以用中位數解決了(hzwer學長在2656中已經寫過,就不再多說了)。複雜度O(nlogn + mlogm)。