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 }
View Code

 

 

 

以上是关于hdu 5128 The E-pang Palace的主要内容,如果未能解决你的问题,请参考以下文章

hdu 5128 The E-pang Palace

hdu-5127------hdu5137

HDU - 1561 The more,The Better

hdu_2124 Flying to the Mars & hdu_1800 Repair the Wall 贪心水题

hdu 1561 The more, The Better(树形dp)

HDU 5366 The mook jong