Cho tọa độ bắt đầu (x1, y1) và kết thúc (x2, y2) của hộp. Thỏ kéo hộp bằng dây dài 1 đơn vị. Thỏ đứng cạnh hộp, kéo hộp đến vị trí của mình, sau đó di chuyển 1 đơn vị ra xa theo cùng hướng. Thỏ có thể di chuyển tự do (không kéo) 1 đơn vị lên/xuống/trái/phải. Mỗi đơn vị di chuyển tốn 1 giây. Tìm thời gian tối thiểu để chuyển hộp từ đầu đến cuối.
Phân tích
- Nếu
x1 != x2VÀy1 != y2(diagonal): Thỏ phải di chuyển ngang + dọc + 2 giây thêm cho việc reposition (đứng cạnh hộp để kéo). - Nếu cùng hàng hoặc cùng cột: Chỉ cần di chuyển theo một trục, không cần reposition thêm.
Công thức: time = |x2-x1| + |y2-y1| + (x1!=x2 && y1!=y2 ? 2 : 0)
Ví dụ C++
#include <bits/stdc++.h>
using namespace std;
int solve(int x1, int y1, int x2, int y2) {
int s = 0;
if (x1 != x2 && y1 != y2)
s = abs(x2 - x1) + abs(y2 - y1) + 2;
else
s = abs(x2 - x1) + abs(y2 - y1);
return s;
}
int main() {
int x1 = 1, y1 = 1, x2 = 2, y2 = 2;
cout << solve(x1, y1, x2, y2) << endl; // Output: 4
return 0;
}
Với (1,1) -> (2,2): |2-1|+|2-1|+2 = 4 giây.