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