https://codeforces.com/gym/102411/problem/I
又想不出,好菜啊,开了coach mode看了别人代码。。。。
从45度的坡面角我们可以知道,假设我们已经确定了中心坐标和高度,那么每根柱子应该h<=R-max(dx,dy),dx,dy即与中心点x,y的差值的绝对值,R为底边正方形的一半也就是高H。
然而从n=1000的数据我还是在想能不能n^2枚举一下先确定一下中心坐标。。。其实照这个公式反着看就能想出来了。
假设dx是较大值,每个柱子可以确定x的左右边界,假设dy是较大值,可以确定y的上下边界,于是/2就好了,然后如果是奇数就高度=(xl+xr)/2+1,然后比较一下横着长还是竖着长,取较长的作为高度就行了。菜哭.jpg
#include<bits/stdc++.h>
using namespace std;
const int maxl=1010;
const int inf=2e8;
int n;
int main()
{
scanf("%d",&n);
int xl=inf,xr=-inf,yl=inf,yr=-inf;
int x,y,h,h2;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&h);
xl=min(x-h,xl);xr=max(xr,x+h);
yl=min(yl,y-h);yr=max(yr,y+h);
}
if((xr-xl)&1)
h=(xr-xl)/2+1;
else
h=(xr-xl)/2;
if((yr-yl)&1)
h2=(yr-yl)/2+1;
else
h2=(yr-yl)/2;
printf("%d %d %d",(xl+xr)/2,(yl+yr)/2,max(h,h2));
return 0;
}