题意
有一个 n n n 行 m m m 列的矩阵,初始所有位置的权值都为 0 0 0.
开始时,你在格子 ( x , y ) (x,y) (x,y) 上。
每天早上,每个格子里的权值都会增加 1 1 1.
每天下午,你可以留在当前格子,或瞬移到上下左右相邻格子中的一个。
每天晚上,你会获得当前格子里的权值,然后清空当前格。
求第 k k k 天晚上后,你所获权值的最大值。
子任务一 ( 20 20 20pts), n = 1 n=1 n=1.
子任务二 ( 20 20 20pts), n = 2 n=2 n=2.
子任务三 ( 20 20 20pts), 2 ∣ n 2|n 2∣n.
子任务四 ( 40 40 40pts),无特殊限制.
对所有的数据, T ≤ 1 0 5 , 1 ≤ n , m ≤ 1 0 9 , 1 ≤ x ≤ n , 1 ≤ y ≤ m , 1 ≤ k ≤ 1 0 18 T\le 10^5,\, 1\le n,m\le 10^9,\,1\le x\le n,\,1\le y\le m,\,1\le k\le 10^{18} T≤105,1≤n,m≤109,1≤x≤n,1≤y≤m,1≤k≤1018.
题解
没有贪心、构造能力的我测试的时候想自闭了。
首先是一个显然而重要的转化:获得的价值等于经过每个格子的最晚时间,所以答案的上界一定是
(
k
−
n
m
+
1
)
+
.
.
.
+
k
(k-nm+1)+...+k
(k−nm+1)+...+k(没往这里想一直在乱画肯定做不出来啊)。
这样就比较可想了,只要最后
n
m
nm
nm步能把图走完即可达到上界。如果
n
n
n或
m
m
m为偶数,那么一定存在哈密顿回路,按回路走即可。否则,如果是都是奇数,考虑能否走完。由于和奇偶有关,考虑黑白染色:把和为奇数的染成黑色,偶数为白色,这样黑色比白色少
1
1
1,要走完所有格子必须从白色出发,且一定能走完(不把自己堵死就好)。如果
k
>
=
n
m
k>=nm
k>=nm,在第一步跳到和为偶数的点上;否则直接走
n
m
−
1
nm-1
nm−1步。
但对于
n
=
1
n=1
n=1或
m
=
1
m=1
m=1的情况需要特殊考虑:如果
k
k
k很大可以走遍所有格子,就到最后再走;否则考虑尽量逼近上界,先往一个方向走几步在走到另一边的尽头即可。