はまやんはまやんはまやん

hamayanhamayan's blog

Pyramid [AtCoder Beginner Contest 112 C]

https://beta.atcoder.jp/contests/abc112/tasks/abc112_c

解法

https://beta.atcoder.jp/contests/abc112/submissions/3347708

ピラミッドの中心座標を全探索しよう。
高度を見ると、「H-中心とのマンハッタン距離」になっているので、
逆に中心は「h[i]+中心とのマンハッタン距離」の高さになっている。
h[i]=0になっているものは距離が分からないので、中心の高さを求めるのには使わない。
中心の高さが求まったあとは、全ての頂点についてそれをチェックする。
チェックが通れば答えとして出力。

int N, x[101], y[101], h[101];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> x[i] >> y[i] >> h[i];
 
    rep(cx, 0, 101) rep(cy, 0, 101) {
        int H = 1;
        rep(i, 0, N) if (h[i]) H = h[i] + abs(cx - x[i]) + abs(cy - y[i]);
        int ok = 1;
        rep(i, 0, N) if (max(H - abs(x[i] - cx) - abs(y[i] - cy), 0) != h[i]) ok = 0;
        if (ok) {
            printf("%d %d %d\n", cx, cy, H);
            return;
        }
    }
}