題目
給定一個二維矩陣,更改每行數字排列使得所有數字不等於上下數字
解法
每次只考慮兩行數字,由題目可推得某個數字在這兩行出現次數大於 $$M$$ 則無解。
選在上下兩行出現最多次的數字 $$X$$,和上行某個不與它相等的數字 $$Y$$,匹配 $$board_{i,j}(=X)$$ 和 $$board_{i-1,k}(=Y)$$。
重複 $$M$$ 次。
證明
令某數 $$a$$ 在上下行出現次數為 $$b$$。
如果這方法不可行,代表原本出現次數 $$b<M$$,經過襙作後 $$b>M$$。
- 如果一次操作選中 $$a$$ 和另一個數字,$$b$$ 和 $$M$$ 同減一,$$b<M$$。
- 如果一次操作沒選中 $$a$$,操作完 $$M-=1$$,這時 $$b>M$$ 的話代表操作前 $$b>M-1$$ 也就是 $$b\geM$$。 可是 $$b\ge M$$ 選操作數字時一定會選到 $$a$$,因為沒有其他出現更多次的數字。
所以這方法一定可以得到解。
程式
可用 priority_queue 找出現最多次的數字 $$X$$,和排序後 deque 找可匹配數字 $$Y$$