正负消除问题

题意:

有一个 (2n+1) 大小的正方形,每个位置放着 + 或 -,每次可以选取一个排列 pi,将 (i,pi) 改变状态。

证明:一定可以使得最后 - 不超过 2n 个。

思路:

这个操作比较复杂,我们先考虑简化。

不难想到用两次操作一起来抵消某些操作,经过观察,我们发现两次操作可以使得的一个矩形的四个角颜色反转。

借助这个观察,我们可以通过消除除了最后一行最后一列之外的 - 使得只有最后一行最后一列有 -,其它都是 +。

这样就小于等于 4n+1

继续简化。

我们考虑主对角线,不难发现,如果最后一行的某个 - 列编号和最后一列某个 - 行编号相同,我们可以通过底角和主对角线构造矩形,消去这两个 -。

这样我们把原图剖分成 2n 个 r 字形和一个底角,每个 r 字形都最多一个 -,答案已经小于等于 2n+1 了。

考虑如何消去底角的 -。

如果最后一行最后一列同时有,可以组成一个矩形使得三个角都是 -,可以减少到 2n1

否则,我们不妨设只有最后一列和主对角线有,显然每一行恰好一个。

我们运用一次最根本的操作,消去主对角线,这时候就是若干行有 2 个,若干行没有。

这时候只用选取两行便能完成一次消除。

考虑到最差情况消去主对角线后还剩 2n+2 个,消去以此减少 2 个,刚好是 2n 个。

很有意思的一道题。

posted @   rlc202204  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示