ABC 112 C - Pyramid 全探索 未解決

未解決。判定ifにどう落とし込むかが大事。

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
const int INF = 1e9;

int main() {
	int N; cin >> N;
	vector<long long>vx(N), vy(N), vh(N);
	int si = -1;
	for (int i = 0; i < N; i++) {
		cin >> vx[i] >> vy[i] >> vh[i];
		if (vh[i] > 0) si = i;//ここでh[]==0でないデータを取っておいて
	}

	long long resx = -1, resy = -1, resh = -1;
	for (long long x = 0; x <= 100; x++) {
		for (long long y = 0; y <= 100; y++) {
			long long h = vh[si] + abs(x - vx[si]) + abs(y - vy[si]);//vh[i]が0でないデータを使っている
			bool ok = true;
			for (int i = 0; i < N; i++) {
				if (vh[i] > 0 && h - vh[i] != abs(x - vx[i]) + abs(y - vy[i]))//どのように考察を落とし込むかが重要
					ok = false;
				if (vh[i] == 0 && h > abs(x - vx[i]) + abs(y - vy[i]))
					ok = false;
			}
			if (ok) resx = x, resy = y, resh = h;//後から処理するためのこれ。return 0は実力がつかない
		}
	}
	cout << resx << " " << resy << " " << resh << endl;
}