hdu 5128 The E-pang Palace
Posted liqgnonqfu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5128 The E-pang Palace相关的知识,希望对你有一定的参考价值。
题目大意:
坐标系中有N个整点,用它们中的一些做顶点连两个长方形,使得长方形不出现cross或touch(如图)的情况,输出两个长方形的所占面积的最大值,如果不存在满足要求的长方形,就输出imp。
(4 <=N <= 30)(T<=15)(0 <= x,y <= 200).
思路:
数据范围很仁慈,暗示了这是一道枚举题。先记录能组成的每一个矩形,在判断两两是否可行,可行就更新ans。
注意:包含也是满足题意的,而且所占面积只是是大长方形的!!
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdlib> 5 6 using namespace std; 7 8 int n,cor[100][2],cnt; 9 10 struct node 11 { 12 long long area; 13 int weizhi[5][2]; 14 }juxing[500000]; 15 16 int main() 17 { 18 scanf("%d",&n); 19 while(n) 20 { 21 cnt=0; 22 memset(juxing,0,sizeof(0)); 23 memset(cor,0,sizeof(0)); 24 for(int i=1;i<=n;i++)scanf("%d%d",&cor[i][0],&cor[i][1]); 25 if(n<8) 26 { 27 printf("imp "); 28 scanf("%d",&n); 29 continue; 30 } 31 for(int i=1;i<=n;i++) 32 for(int j=i+1;j<=n;j++) 33 for(int k=j+1;k<=n;k++) 34 for(int g=k+1;g<=n;g++) 35 { 36 if(cor[i][0]==cor[j][0]) 37 { 38 if((cor[i][1]==cor[k][1])&&(cor[g][1]==cor[j][1])&&(cor[g][0]==cor[k][0])) 39 { 40 cnt++; 41 juxing[cnt].area=(cor[i][1]-cor[j][1])*(cor[i][0]-cor[k][0]); 42 juxing[cnt].weizhi[1][1]=cor[i][1];juxing[cnt].weizhi[1][0]=cor[i][0]; 43 juxing[cnt].weizhi[2][1]=cor[k][1];juxing[cnt].weizhi[2][0]=cor[k][0]; 44 juxing[cnt].weizhi[3][1]=cor[j][1];juxing[cnt].weizhi[3][0]=cor[j][0]; 45 juxing[cnt].weizhi[4][1]=cor[g][1];juxing[cnt].weizhi[4][0]=cor[g][0]; 46 } 47 if((cor[i][1]==cor[g][1])&&(cor[k][0]==cor[g][0])&&(cor[k][1]==cor[j][1])) 48 { 49 cnt++; 50 juxing[cnt].area=(cor[i][1]-cor[j][1])*(cor[i][0]-cor[g][0]); 51 juxing[cnt].weizhi[1][1]=cor[i][1];juxing[cnt].weizhi[1][0]=cor[i][0]; 52 juxing[cnt].weizhi[2][1]=cor[g][1];juxing[cnt].weizhi[2][0]=cor[g][0]; 53 juxing[cnt].weizhi[3][1]=cor[j][1];juxing[cnt].weizhi[3][0]=cor[j][0]; 54 juxing[cnt].weizhi[4][1]=cor[k][1];juxing[cnt].weizhi[4][0]=cor[k][0]; 55 } 56 } 57 if(cor[i][0]==cor[k][0]) 58 { 59 if((cor[i][1]==cor[j][1])&&(cor[g][1]==cor[k][1])&&(cor[g][0]==cor[j][0])) 60 { 61 cnt++; 62 juxing[cnt].area=(cor[i][1]-cor[k][1])*(cor[i][0]-cor[j][0]); 63 juxing[cnt].weizhi[1][1]=cor[i][1];juxing[cnt].weizhi[1][0]=cor[i][0]; 64 juxing[cnt].weizhi[2][1]=cor[j][1];juxing[cnt].weizhi[2][0]=cor[j][0]; 65 juxing[cnt].weizhi[3][1]=cor[k][1];juxing[cnt].weizhi[3][0]=cor[k][0]; 66 juxing[cnt].weizhi[4][1]=cor[g][1];juxing[cnt].weizhi[4][0]=cor[g][0]; 67 } 68 if((cor[i][1]==cor[g][1])&&(cor[j][1]==cor[k][1])&&(cor[j][0]==cor[g][0])) 69 { 70 cnt++; 71 juxing[cnt].area=(cor[i][1]-cor[k][1])*(cor[i][0]-cor[g][0]); 72 juxing[cnt].weizhi[1][1]=cor[i][1];juxing[cnt].weizhi[1][0]=cor[i][0]; 73 juxing[cnt].weizhi[2][1]=cor[g][1];juxing[cnt].weizhi[2][0]=cor[g][0]; 74 juxing[cnt].weizhi[3][1]=cor[k][1];juxing[cnt].weizhi[3][0]=cor[k][0]; 75 juxing[cnt].weizhi[4][1]=cor[j][1];juxing[cnt].weizhi[4][0]=cor[j][0]; 76 } 77 } 78 if(cor[i][0]==cor[g][0]) 79 { 80 if((cor[i][1]==cor[j][1])&&(cor[k][1]==cor[g][1])&&(cor[k][0]==cor[j][0])) 81 { 82 cnt++; 83 juxing[cnt].area=(cor[i][1]-cor[j][1])*(cor[i][0]-cor[k][0]); 84 juxing[cnt].weizhi[1][1]=cor[i][1];juxing[cnt].weizhi[1][0]=cor[i][0]; 85 juxing[cnt].weizhi[2][1]=cor[j][1];juxing[cnt].weizhi[2][0]=cor[j][0]; 86 juxing[cnt].weizhi[3][1]=cor[g][1];juxing[cnt].weizhi[3][0]=cor[g][0]; 87 juxing[cnt].weizhi[4][1]=cor[k][1];juxing[cnt].weizhi[4][0]=cor[k][0]; 88 } 89 if((cor[i][1]==cor[k][1])&&(cor[j][1]==cor[g][1])&&(cor[j][0]==cor[k][0])) 90 { 91 cnt++; 92 juxing[cnt].area=(cor[i][1]-cor[j][1])*(cor[i][0]-cor[k][0]); 93 juxing[cnt].weizhi[1][1]=cor[i][1];juxing[cnt].weizhi[1][0]=cor[i][0]; 94 juxing[cnt].weizhi[2][1]=cor[k][1];juxing[cnt].weizhi[2][0]=cor[k][0]; 95 juxing[cnt].weizhi[3][1]=cor[g][1];juxing[cnt].weizhi[3][0]=cor[g][0]; 96 juxing[cnt].weizhi[4][1]=cor[j][1];juxing[cnt].weizhi[4][0]=cor[j][0]; 97 } 98 } 99 } 100 if(cnt<=1) 101 { 102 printf("imp "); 103 scanf("%d",&n); 104 continue; 105 } 106 long long ans=0; 107 for(int i=1;i<=cnt;i++) 108 for(int j=i+1;j<=cnt;j++) 109 { 110 int ximax=max(juxing[i].weizhi[1][0],juxing[i].weizhi[2][0]); 111 int ximin=min(juxing[i].weizhi[1][0],juxing[i].weizhi[2][0]); 112 int yimax=max(juxing[i].weizhi[1][1],juxing[i].weizhi[3][1]); 113 int yimin=min(juxing[i].weizhi[1][1],juxing[i].weizhi[3][1]); 114 int xjmax=max(juxing[j].weizhi[1][0],juxing[j].weizhi[2][0]); 115 int xjmin=min(juxing[j].weizhi[1][0],juxing[j].weizhi[2][0]); 116 int yjmax=max(juxing[j].weizhi[1][1],juxing[j].weizhi[3][1]); 117 int yjmin=min(juxing[j].weizhi[1][1],juxing[j].weizhi[3][1]); 118 if((ximin>xjmax)||(xjmin>ximax)||(yimin>yjmax)||(yjmin>yimax)) 119 { 120 if(ans<juxing[i].area+juxing[j].area)ans=juxing[i].area+juxing[j].area; 121 } 122 if((ximin>xjmin)&&(ximax<xjmax)&&(yimin>yjmin)&&(yimax<yjmax)) 123 { 124 if(ans<juxing[j].area)ans=juxing[j].area; 125 } 126 if((ximin<xjmin)&&(ximax>xjmax)&&(yimin<yjmin)&&(yimax>yjmax)) 127 { 128 if(ans<juxing[i].area)ans=juxing[i].area; 129 } 130 } 131 if(ans==0) 132 { 133 printf("imp "); 134 scanf("%d",&n); 135 continue; 136 } 137 printf("%I64d ",ans); 138 scanf("%d",&n); 139 } 140 return 0; 141 }
以上是关于hdu 5128 The E-pang Palace的主要内容,如果未能解决你的问题,请参考以下文章
HDU - 1561 The more,The Better
hdu_2124 Flying to the Mars & hdu_1800 Repair the Wall 贪心水题