題意:
有一個 \((2n+1)\) 大小的正方形,每個位置放著 + 或 -,每次可以選取一個排列 \(p_i\),將 \((i, p_i)\) 改變狀態。
證明:一定可以使得最後 - 不超過 \(2n\) 個。
思路:
這個操作比較複雜,我們先考慮簡化。
不難想到用兩次操作一起來抵消某些操作,經過觀察,我們發現兩次操作可以使得的一個矩形的四個角顏色反轉。
藉助這個觀察,我們可以透過消除除了最後一行最後一列之外的 - 使得只有最後一行最後一列有 -,其它都是 +。
這樣就小於等於 \(4n+1\)。
繼續簡化。
我們考慮主對角線,不難發現,如果最後一行的某個 - 列編號和最後一列某個 - 行編號相同,我們可以透過底角和主對角線構造矩形,消去這兩個 -。
這樣我們把原圖剖分成 \(2n\) 個 r 字形和一個底角,每個 r 字形都最多一個 -,答案已經小於等於 \(2n+1\) 了。
考慮如何消去底角的 -。
如果最後一行最後一列同時有,可以組成一個矩形使得三個角都是 -,可以減少到 \(2n-1\)。
否則,我們不妨設只有最後一列和主對角線有,顯然每一行恰好一個。
我們運用一次最根本的操作,消去主對角線,這時候就是若干行有 2 個,若干行沒有。
這時候只用選取兩行便能完成一次消除。
考慮到最差情況消去主對角線後還剩 \(2n+2\) 個,消去以此減少 2 個,剛好是 \(2n\) 個。
很有意思的一道題。