สมมติว่าเรามีจุดสองจุด a = (x1, y1) และ b = (x2, y2) ระยะทางแมนฮัตตันระหว่างจุดคือ dist(a, b) = |x1 - x2| + |y1 - y2| ถ้าจุด a อยู่ที่ (0, 0) และจุด b อยู่ที่ (x, y) เราต้องหาจุด c ที่ทำให้ dist(a, c) = dist(a, b)/2 และ dist(b, c) = dist(a, b)/2 ถ้าไม่มีจุดแบบนี้พิมพ์ -1, -1
เช่น ถ้าอินพุตคือ x = 13, y = 7 เอาต์พุตจะเป็น 6, 4
ขั้นตอนการแก้ปัญหา
if x mod 2 == 0 และ y mod 2 == 0:
print(x / 2, y / 2)
else if (x + y) mod 2 == 1:
print(-1, -1)
otherwise:
print(x / 2, (y + 1) / 2)
ตัวอย่างโค้ด
#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;
}
อินพุต
13, 7
เอาต์พุต
6 4