CF1428A Box is Pull 題解
阿新 • • 發佈:2021-12-16
CF1428A Box is Pull 題解
Content
有一個兔子拖著一個盒子在走,每秒鐘可以帶著盒子走一個單位,也可以不帶著盒子走一個單位。當且僅當兔子和盒子的距離不超過 \(1\) 時可以帶著盒子走一個單位。現給出 \(t\) 次詢問,每次詢問給出四個整數 \(x_1,y_1,x_2,y_2\),試求出將盒子從 \((x_1,y_1)\) 拖到 \((x_2,y_2)\) 最少需要多少秒。
資料範圍:\(1\leqslant t\leqslant 1000,1\leqslant x_1,y_1,x_2,y_2\leqslant 10^9\)。
Solution
謹以此紀念本人的第一場 CF。
我們根據三個情況來分類討論:
- \(x_1=x_2\)
- \(y_1=y_2\),此時直接向平行於 \(x\) 軸的方向移動即可,答案就是 \(|x_1-x_2|\)。
- \(x_1\neq x_2\) 且 \(y_1\neq y_2\),此時先往一個方向走,再轉到另一個方向去走,由題目可知,轉向需要讓兔子先移動 \(2\) 個單位,所以答案就是 \(|x_1-x_2|+|y_1-y_2|+2\)。
直接根據每個情況輸出答案即可。
Code
int t, x1, y1, x2, y2; int main() { getint(t); while(t--) { int ans = 0; getint(x1), getint(y1), getint(x2), getint(y2); if(x1 == x2) ans = abs(y1 - y2); else if(y1 == y2) ans = abs(x1 - x2); else ans = abs(x1 - x2) + abs(y1 - y2) + 2; writeint(ans), puts(""); } return 0; }