Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2756
Algorithm:
比较新颖的题目
首先发现是对矩阵中相邻两数进行操作 <-----> 想到黑白染色
于是Delta(BlackSum)=Delta(WhiteSum)
由于最后要变成同一个数X,
那么在BlackNum=WhiteNum时,
1、如果WhiteSum!=BlackSum,显然无解
扫描二维码关注公众号,回复:
976602 查看本文章
2、如果WhiteSum==BlackSum时,由于矩阵能被1*2的矩形完全覆盖,那么X是否满足要求是具有单调性的
于是我们二分X,进行判断即可
在WhiteNum!=BlackNum时,
显然可以得到X∗WhiteNum−WhiteSum=X∗BlackNum−BlackSum
移项后显然可以化简出X=(BlackSum−WhiteSum) / (BlackNum−WhiteNum)
验证这个X即可
最大问题,如何判断X是否可行,
一开始得出的性质:Delta(BlackSum)=Delta(WhiteSum),符合流守恒性(流入和流出量相同)
于是我们进行可以将黑点看作一边,而将白点看作另外一边,网络流建图:
S-->白点,CAP为X-val[i][j]
黑点-->T,CAP为X-val[i][j]
相邻的白点-->黑点,CAP为INF
判断能否满流即可
Code:
待填坑
Review:
1、看到这种对相邻格子同时操作的题目,想到黑白染色
2、求极值,观察值的可行性是否具有单调性,从而能否二分
3、当数据能分为两组,且具有流守恒性时
考虑使用网络流