Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Code C++ tính thời gian tối thiểu thỏ kéo hộp


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 != x2 VÀ 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.