Giả sử, có một tòa nhà có tọa độ tâm xc, yc và chiều cao h. Chúng tôi không biết tọa độ trung tâm của tòa nhà, nhưng chúng tôi được cung cấp n mẩu thông tin chứa tọa độ x, y và giá trị độ cao a. Cao độ của tọa độ (x, y) là cực đại của (h - | x - xc | - | y - yc |, 0). Chúng tôi phải tìm ra tọa độ trung tâm và chiều cao của tòa nhà. Tọa độ xi được cho trong mảng x, yi được cho trong mảng teg y và ai được cho trong mảng a.
Vì vậy, nếu đầu vào là n =3, x ={3, 3, 2}, y ={4, 2, 3}, a ={6, 6, 6}, thì đầu ra sẽ là 3 3 7.
Tọa độ trung tâm là 3,3 và chiều cao của tòa nhà là 7.
Các bước
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
check := true for initialize xc := 0, when xc <= 100, update (increase xc by 1), do: for initialize yc := 0, when yc <= 100, update (increase yc by 1), do: check := true mh := 2000000000 h := -1 for initialize i := 0, when i < n, update (increase i by 1), do: k := |(x[i] - xc) + |y[i] - yc|| if a[i] is same as 0, then: mh := minimum of mh and k else: if h < 0, then: h := a[i] + k otherwise when h is not equal to a[i] + k, then: check := false Come out from the loop if h > mh, then: check := false Ignore following part, skip to the next iteration if check is non-zero, then: Come out from the loop if check is non-zero, then: Come out from the loop print(xc, yc, h)
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; void solve(int n, vector<int> x, vector<int> y, vector<int> a){ bool check = true; int xc, yc, h; for (xc = 0; xc <= 100; xc++) { for (yc = 0; yc <= 100; yc++) { check = true; int k, mh = 2e9; h = -1; for(int i = 0; i < n; i++) { k = abs(x[i] - xc) + abs(y[i] - yc); if (a[i] == 0) { mh = min(mh, k); } else { if (h < 0) { h = a[i] + k; } else if (h != a[i] + k) { check = false; break; } } } if (h > mh) { check = false; continue; } if (check) { break; } } if (check) { break; } } cout << xc << " " << yc << " " << h; } int main() { int n = 3; vector<int> x = {3, 3, 2}, y = {4, 2, 3}, a = {6, 6, 6}; solve(n, x, y, a); return 0; }
Đầu vào
3, {3, 3, 2}, {4, 2, 3}, {6, 6, 6}
Đầu ra
3 3 7