原题链接:
https://vjudge.net/problem/Gym-102411I
AC代码:
#include <algorithm>
#include <bits/stdc++.h>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
const int INF = 0x3fffffff;
typedef long long ll;
typedef unsigned long long ull;
void __init__()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
} //head
int main()
{
__init__();
int n;
int xl = INF, yl = INF, hf, xr = -INF, yr = -INF, hs;
int x, y, h;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> x >> y >> h;
xl = min(xl, x - h);
xr = max(xr, x + h);
yl = min(yl, y - h);
yr = max(yr, y + h);
}
hf = (xr - xl) % 2 == 0 ? (xr - xl) / 2 : (xr - xl) / 2 + 1;
hs = (yr - yl) % 2 == 0 ? (yr - yl) / 2 : (yr - yl) / 2 + 1;
int hc = max(hf, hs);
int xc = (xl + xr) / 2;
int yc = (yl + yr) / 2;
cout << xc << " " << yc << " " << hc << endl;
return 0;
}
我们考虑金字塔的正视图和侧视图,因为直角等腰三角形的性质,我们可以得到要满足柱子摆放的最大边界,则其中点组合起来就是金字塔中心的x,y坐标,高度(底边的一半)则为两视图中最大的一方。