zoukankan      html  css  js  c++  java
  • hdu 5129 (枚举) The E-pang Palace

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5128

    给你n个点,问能否组成两个不相交的与坐标轴平行的矩形,能就输出两矩形的面积和,不能就输出一个字符串。

    由于n的范围就30,所以就是枚举一下就行,先将能够组成的矩形找出来,然后再两两比较,注意的是有一个矩形包含另一个矩形的

    情况,此时和就是大矩形的面积。写的时候细心一点就好。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 struct point{
     8    int x,y;
     9 }a[220];
    10 
    11 int ju[31500][5],dir1[220][220];
    12 
    13 int max(int x,int y){return x>y?x:y;}
    14 
    15 bool cmp(point a,point b)
    16 {
    17     if (a.x==b.x) return a.y<b.y;
    18     return a.x<b.x;
    19 }
    20 
    21 int check(int *x,int *y){
    22    if (a[x[0]].x<a[y[0]].x&&a[x[2]].x>a[y[2]].x&&a[x[1]].y>a[y[1]].y&&a[x[0]].y<a[y[0]].y)
    23      return 1;
    24    return 0;
    25 }
    26 
    27 int main()
    28 {
    29     int n,i,q,k,u;
    30     while (~scanf("%d",&n)&&n)
    31     {
    32         int ans=0;
    33         for (i=1 ; i<=n ; i++) scanf("%d%d",&a[i].x,&a[i].y);
    34         sort(a+1,a+n+1,cmp);
    35         for (i=1 ; i<=n ; i++){
    36             int j=i;
    37             while (a[i].x==a[j].x) j++;
    38             for (k=i+1 ; k<j ; k++){
    39                 for (u=j ; u<=n ; u++){
    40                     if (a[u].y==a[i].y){
    41                         for (q=u+1 ; q<=n ; q++){
    42                             if (a[q].y==a[k].y){
    43                                 ju[ans][0]=i;
    44                                 ju[ans][1]=k;
    45                                 ju[ans][2]=u;
    46                                 ju[ans++][3]=q;
    47                             }
    48                         }
    49                     }
    50                 }
    51             }
    52         }
    53         /*for (i=0 ; i<ans ; i++) {
    54             for (int j=0 ; j<4 ; j++)
    55                 cout<<ju[i][j];
    56             cout<<endl;
    57         }*/
    58         int sum=0;
    59         if (ans<2) {puts("imp");continue;}
    60         for (i=0 ; i<ans ; i++){
    61             memset(dir1,0,sizeof(dir1));
    62             int ar1=(a[ju[i][2]].x-a[ju[i][0]].x)*(a[ju[i][1]].y-a[ju[i][0]].y);
    63             for (k=a[ju[i][0]].x ; k<=a[ju[i][2]].x ; k++){
    64                 for (q=a[ju[i][0]].y ; q<=a[ju[i][1]].y ; q++)
    65                     dir1[k][q]=1;
    66             }
    67             for (int j=i+1 ; j<ans ; j++){
    68                 int flag=0;
    69                 for (k=a[ju[j][0]].x ; k<=a[ju[j][2]].x ; k++){
    70                 for (q=a[ju[j][0]].y ; q<=a[ju[j][1]].y ; q++){
    71                      if (dir1[k][q]==1) flag=1;
    72                 }
    73                 }
    74                 if (flag==0||check(ju[i],ju[j])||check(ju[j],ju[i])){
    75                 int ar2=ar1;
    76                 ar2+=(a[ju[j][2]].x-a[ju[j][0]].x)*(a[ju[j][1]].y-a[ju[j][0]].y);
    77                 if (check(ju[i],ju[j])) ar2=ar1;
    78                 if (check(ju[j],ju[i])) ar2-=ar1;
    79                 sum=max(ar2,sum);
    80                 }
    81             }
    82         }
    83         if (sum==0) puts("imp");
    84         else printf("%d
    ",sum);
    85     }
    86     return 0;
    87 }
  • 相关阅读:
    requirejs按需加载angularjs文件
    Ricky_Huang的博客园网址二维码
    bootstrap双日历插件实例化
    angularjs ocLazyLoad分步加载js文件,angularjs ocLazyLoad按需加载js
    利用html5 canvas实现纯前端上传图片的裁剪
    <input type="file"> change事件异常处理办法
    react-native-http请求后navigator导航跳转
    js 将long型字符串转换成日期格式
    百度ueditor 实例化 Cannot set property 'innerHTML' of null 完美解决方案
    IDEA 创建Maven Web项目(图文版)
  • 原文地址:https://www.cnblogs.com/JJCHEHEDA/p/5449237.html
Copyright © 2011-2022 走看看