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

Tìm điểm C thỏa mãn khoảng cách Manhattan bằng C++

Mô tả bài toán

Cho điểm a=(0,0), b=(x,y). Tìm điểm c sao cho dist(a,c) = dist(b,c) = dist(a,b)/2. Khoảng cách Manhattan: |x1-x2|+|y1-y2|. Nếu không tồn tại thì in -1 -1.

Ví dụ

x=13, y=7 → Output: 6 4.

Thuật toán

dist(a,b) = x+y. Cần x+y chẵn. Nếu x,y đều chẵn → c=(x/2, y/2). Nếu x+y lẻ → không thể (-1,-1). Nếu một chẵn một lẻ → c=(x/2, (y+1)/2) (hoặc đối xứng).

Code C++

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

void solve(int x, int y) {
    if (x%2==0 && y%2==0)
        cout << x/2 << ' ' << y/2 << endl;
    else if ((x+y)%2==1)
        cout << -1 << ' ' << -1 << endl;
    else
        cout << x/2 << ' ' << (y+1)/2 << endl;
}

int main() {
    int x=13, y=7;
    solve(x, y);
    return 0;
}

Đầu vào / Đầu ra

Input: 13, 7

Output: 6 4