uva 1312 一个矩形中的最大的子矩形(其中不能包含某些点)

来源:互联网 发布:第一个程序员名字 编辑:程序博客网 时间:2024/05/17 20:00
#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);}}

原创粉丝点击