收录一些题目或解法方面的错误/天才想法/trick。
1.trick
1-1.切比雪夫距离和曼哈顿距离互转
切比雪夫距离
d2=max(∣x1−x2∣,∣y1−y2∣),曼哈顿距离
d1=∣x1−x2∣+∣y1−y2∣。
2×max(a,b)=a+b+∣a−b∣(a,b⩾0)⇒(a+b=∣a+b∣)∣a∣+∣b∣={∣a+b∣,ab⩾0∣a−b∣,ab<0∣a∣−∣b∣={∣a−b∣,ab⩾0∣a+b∣,ab<0∴∣a∣+∣b∣+∣a∣−∣b∣=∣a+b∣+∣a−b∣======d2((x1,y1),(x2,y2))max(∣x1−x2∣,∣y1−y2∣)2∣x1−x2∣+∣y1−y2∣+∣x1−x2∣−∣y1−y2∣2∣(x1−x2)+(y1−y2)∣+∣(x1−x2)−(y1−y2)∣2∣(x1+y1)−(x2+y2)∣+∣(x1−y1)−(x2−y2)∣2d1((x1+y1,x1−y1),(x2+y2,x2−y2))d1((2x1+y1,2x1−y1),(2x2+y2,2x2−y2))
同理换元(令
a=x+y,b=x−y)可得
d1((x1,y1),(x2,y2))=d2((x1+y1,x1−y1),(x2+y2,x2−y2))。(注意
x←x+y,y←x−y 的时候切比雪夫距离转曼哈顿距离需要除以
2,而曼哈顿距离转切比雪夫距离的时候不需要。)
三维空间切比雪夫距离和曼哈顿距离不能直接互转,因为曼哈顿是八面体(
6 个顶点)而切比雪夫是正方体(
8 个顶点)。但是如果保证两点都在
x+y+z=C 平面上,两点间曼哈顿距离恰好等于其切比雪夫距离的
2 倍。
遇到六边形最短距离的时候可以往这方面想,例题:
2025 hdu 多校#7 1002 龙族栖息地。
1-2. 旋转坐标系 45 度
yi+d⩾∣xi−xj∣+yj⇒{yi+d⩾xi−xj+yj⇒(yi−xi)+d⩾(yj−xj)yi+d⩾−xi+xj+yj⇒(yi+xi)+d⩾(yj+xj)i.e. xi′+d⩾xj′, yi′+d⩾yj′.
——
「NAPC #2」rStage3 ~ Hard Jump Refreshers
1-3. 拆绝对值
比如我们有
dpi←maxj<i(dpj−1+∣ai−aj∣),因为
∣x∣⩾±x 且
max(x,−x)=∣x∣,那么可以直接把转移方程写成
dpi←maxj<i(dpj−1+(ai−aj))=ai+maxj<i(dpj−1−aj),dpi←maxj<i(dpj−1+(aj−ai))=−ai+maxj<i(dpj−1+aj),这样分别维护
dpi−1±ai 的前缀最大值就能
O(n) 做完了。(当然如果原方程改成
min 就要求绝对值前面是负号,否则把
∣x∣ 拆成
±x 就会产生增根。)
2.经典模型
2-1. 六边形平面上的最短距离(见 1-1)
2-2. 正权图求最长路
如果都是正权边且最长路不是正无穷,一定不存在环,可以直接使用拓扑排序解决。
否则仍然可以拓扑排序,然后没被访问到的节点都是正无穷,因为他们在环里面或环后面。
如果边权有正有负那只能 spfa 了。
3.常见错误
- (组合)把 x1+x2+⋯+xn⩽m 解个数问题和 =m 解个数问题的答案搞混了,前者是后者对于 i=0→m 求和也就是 ∑(n−1n−1+i)=(nn+m)。
- 在有负环的图上跑 SPFA 的时候
dis 记得开 ll,如果边权是 109 量级的话负环跑几圈就爆 int 了。