UVALive 2689 极大子正方形
2014-03-04 00:15
288 查看
本题思路详见论文《浅谈用极大化思想解决最大子矩形问题》的算法一,我们的子正方形一定在子矩形的内部,且边长为矩形长宽的一个较小值。
#include<cstdio> #include<algorithm> #define maxn 109 using namespace std; int ansl,ansx,ansy; struct node { int x,y; bool operator<(const node &rhs)const { return x<rhs.x; } }p[maxn]; bool cmp(node a,node b) { return a.y<b.y; } void update(int x1,int x2,int y1,int y2) { if(ansl<min(x2-x1,y2-y1)) { ansl=min(x2-x1,y2-y1); ansx=x1; ansy=y1; } } int main() { int tt; scanf("%d",&tt); while(tt--) { int n,W,H; ansl=1,ansx=ansy=0; scanf("%d%d%d",&n,&W,&H); bool f0=0,fn=0; for(int i=0;i<n;i++) { scanf("%d%d",&p[i].x,&p[i].y); if(p[i].x==0&&p[i].y==0)f0=1; if(p[i].x==W&&p[i].y==H)fn=1; } if(!f0)p[n++]=(node){0,0}; //把边界作为特殊的点插入点集 if(!fn)p[n++]=(node){W,H}; sort(p,p+n); for(int i=0;i<n;i++) { int X=p[i].x,Y=p[i].y,L=0,R=H; for(int j=i+1;j<n;j++) { if(p[j].x==X)continue; update(X,p[j].x,L,R); if(p[j].y<Y) L=max(L,p[j].y); else if(p[j].y>Y) R=min(R,p[j].y); else break; } } for(int i=n-1;i>=0;i--) { int L=0,R=H,X=p[i].x,Y=p[i].y; for(int j=i-1;j>=0;j--) { if(X==p[j].x)continue; update(p[j].x,X,L,R); if(p[j].y>Y) R=min(R,p[j].y); else if(p[j].y<Y) L=max(L,p[j].y); else break; } } sort(p,p+n,cmp); for(int i=1;i<n;i++) { if(p[i].y!=p[i-1].y) update(0,W,p[i-1].y,p[i].y); } printf("%d %d %d\n",ansx,ansy,ansl); if(tt)printf("\n"); } }
相关文章推荐
- UVALive - 2689 Cricket Field
- UVALive - 2689 Cricket Field
- UVALive - 5902 Movie collection 二叉索引树
- UVALive - 3353 Optimal Bus Route Design(二分图最佳匹配)
- UVALive 4839 HDU 3686 Traffic Real Time Query System
- uvalive 4730王国kingdom(并查集+线段树)
- UVALive 4627 -- Islands (并查集)
- UVALive5369 UVa732 HDU1515 ZOJ1004 Anagrams by Stack【DFS+堆栈】
- UVALive 7511 Multiplication Table
- UVALive 5963 Confusion in the Problem Set 思维题、Interesting
- UVALIVE 3942 Remember the Word 字典树
- UVALive - 7511 Multiplication Table (模拟)
- UVALIve 4256 图的dp
- UVAlive 6426 Count【读入】
- UVALive7220
- UVALive 4329 Ping pong(线段树)
- UVALive 6187_Never Wait for Weights(带权并查集)
- UVALive 6508 Permutation Graphs
- UVALive 2453 Wall (凸包)
- UVALive 6525 Attacking rooks