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; }