Hướng dẫn giải của [200 đề thầy Đức] Bài 20: Robot di chuyển


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Hướng dẫn giải

Robot đi trên mặt phẳng tọa độ, mỗi bước được thay đổi hoành độ và tung độ, mỗi cái tăng hoặc giảm 1 (hoặc giữ nguyên). Tìm số bước ít nhất để đi từ điểm xuất phát đến điểm đích.

Cách làm
  • Gọi dx là độ chênh lệch hoành độ, dy là độ chênh lệch tung độ (lấy trị tuyệt đối).
  • Mỗi bước robot có thể giảm dx đi 1 và dy đi 1 cùng lúc, nên khi cả hai cùng lớn thì đi chéo tiết kiệm bước.
  • Số bước ít nhất là giá trị lớn hơn trong hai số dx và dy. Ví dụ: dx = 4, dy = 5 thì đi chéo 4 bước rồi đi thẳng 1 bước, tổng 5 bước.

Toạ độ có thể lên tới 10^9 nên hiệu có thể lên tới 2*10^9, vượt quá int. Phải dùng long long.

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long x1, y1, x2, y2;
    cin >> x1 >> y1;
    cin >> x2 >> y2;
    // Độ chênh lệch theo hoành độ
    long long dx = x2 - x1;
    if (dx < 0) dx = -dx;
    // Độ chênh lệch theo tung độ
    long long dy = y2 - y1;
    if (dy < 0) dy = -dy;
    // Mỗi bước robot được đổi cả hoành độ và tung độ cùng lúc,
    // nên số bước tối thiểu là giá trị lớn hơn trong hai độ chênh lệch
    long long ketqua = dx;
    if (dy > dx) ketqua = dy;
    cout << ketqua << "\n";
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.