#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int p,q,l,n,w,h;
struct node{
int x,y;
node(int a=0,int b=0):x(a),y(b){}
}t[160];
bool cmpx(const node &a,const node &b){
return a.x==b.x?a.y<b.y:a.x<b.x;
}
bool cmpy(const node &a,const node &b){
return a.y==b.y?a.x<b.x:a.y<b.y;
}
void solve(){
p=q=l=0;
sort(t,t+n,cmpx);
for(int i=0;i<n;i++){
int m1=0,m2=h;
for(int j=i+1;j<n;j++){
int ll=min(t[j].x-t[i].x,m2-m1);
if(ll>l){
l=ll;
p=t[i].x;
q=m1;
}
if(t[i].x == t[j].x) continue;
if(t[j].y > t[i].y) m2=min(m2,t[j].y);
else m1=max(m1,t[j].y);
}
}
sort(t,t+n,cmpy);
for(int i=0;i<n;i++){
int m1=0,m2=w;
for(int j=i+1;j<n;j++){
int ll=min(t[j].y-t[i].y,m2-m1);
if(ll>l){
l=ll;
p=m1;
q=t[i].y;
}
if(t[i].y == t[j].y) continue;
if(t[j].x > t[i].x) m2=min(m2,t[j].x);
else m1=max(m1,t[j].x);
}
}
}
int main(){
int T,t1;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&w,&h);
for(int i=0;i<n;i++)
scanf("%d%d",&t[i].x,&t[i].y);
t[n++]=node(0,0);
t[n++]=node(w,0);
t[n++]=node(0,h);
t[n++]=node(w,h);
solve();
if(t1++) printf("\n");
printf("%d %d %d\n",p,q,l);
}
}
uva 1312 一个矩形中的最大的子矩形(其中不能包含某些点)
最新推荐文章于 2021-03-15 12:50:39 发布