「2 つの区間の交差している部分の長さ」を求める問題は典型。それが 3 次元になってもやることは一緒。
問題概要
3 次元空間内の直方体であって、2 点 を結ぶ線分を対角線とし、全ての面が xy 平面、yz 平面、zx 平面のいずれかに平行なものを と表す。
2 つの直方体 と の共通部分の体積が正の値であるかどうかを判定せよ。
制約
考えたこと:1 次元のとき
まず、1 次元の場合を考えよう。区間 と区間 の交差する箇所を求めたいときは、次のようにするのが定石だ。
- (左端の max をとる)
- (右端の min をとる)
として、 であれば、交差部分は区間 となる。 のときは交差しないこととなる。
3 次元
3 次元になっても結局同様だ。x 座標、y 座標、z 座標それぞれについて、交差部分を表す区間を求めればよいのだ。
x 座標、y 座標、z 座標すべてについて、交差部分が存在していれば、直方体同士も交差すると判定できる。
コード
#include <bits/stdc++.h> using namespace std; int main() { int a, b, c, d, e, f, g, h, i, j, k, l; cin >> a >> b >> c >> d >> e >> f >> g >> h >> i >> j >> k >> l; int lx = max(a, g), rx = min(d, j); int ly = max(b, h), ry = min(e, k); int lz = max(c, i), rz = min(f, l); if (lx < rx && ly < ry && lz < rz) cout << "Yes" << endl; else cout << "No" << endl; }