题目大意
定义两个长度为
n的数列
A,B的差异值为:在
A中任取一个数
u,在
B中任取一个数
v,使得
u>v的数对对数。
现在有
n2个数字,编号为
1~
n2,将这些数字放在一个
n×n的矩阵里,使任意两行间的差异值最小。
解析
我们考虑
n很小的情况:
1.n=1 1
2.n=2 1 4
2 3
3.n=3,由样例知差异值最小为
4,所以我们可以构造出下面的矩阵,使其差异值为
4:
1 6 7
2 5 8
3 4 9
观察一下上面的矩阵,我们可以发现一个规律:
对于一个边长为
n的矩阵,我们可以这样构造:
第一列
1−n正序,第二列
n+1−2n倒序,……,直到排满矩阵。
我们抱着试一试的心态交了上去,发现离奇的过了全部的数据点。那么这是为什么呢?
正确性证明
由于我们的差异值具有方向,所以我们要从上往下计算一次差异值,再反方向计算一次。
我们先考虑
n为奇数的情况。
那么我们的矩阵为:
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡123...n2n2n−12n−2...n+12n+12n+22n+3...3n...............n(n−1)+1n(n−1)+2n(n−1)+3...n2⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
对于上面的行和下面的行比较,我们观察到第奇数行的数从上往下递增,偶数行从上往下递减,左边的行的所有数都小于右边的行。
那么上下任意两行比较的差异值为
0+2+2+4+4+...+(n−1)+(n−1)=2n2−1
我们再考虑从下往上比,按照同样的方式推出差异值为
1+1+3+3+...+(n−1)+(n−1)+n=2n2+1
2n2+1>2n2−1
所以任意两行间最小差异值的最大为
2n2−1
我们再考虑
n为偶数的情况。
那么我们的矩阵为:
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡123...n2n2n−12n−2...n+12n+12n+22n+3...3n...............n2n2−1n2−2...n(n−1)+1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
从上往下比较,我们的差异值为
0+2+2+4+4+...+(n−2)+(n−2)+n=2n2
从下往上比较,我们的差异值为
1+1+3+3+...+(n−1)+(n−1)=2n2
任意两行间最小差异值最大为
2n2
因为有
n2个数,所以总差异值最大为
(n2−1)+(n2−2)+...+1=2n4−n2
一共有
n2−n行进行了比较,所以最小差异值
=2(n2−n)n4−n2
2(n2−n)n4−n2≤2(n2−1)n4−n2=⌊2n2⌋
即当
n为奇数时最小差异值最大为
2n2−1,当
n为偶数时最小差异值最大为
2n2。
证毕。