码迷,mamicode.com
首页 > 其他好文 > 详细

The E-pang Palace

时间:2014-12-08 21:18:04      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   for   div   

题目:HDU5128 The E-pang Palace

解题思路:1.由于pillar的个数只有30个,故rectangular的个数最多15*14/2=105个,故可用暴力解法枚举rectangular的个数。

     2.把每个点都作为rectangular左下角的点,进行枚举所有。

     3.把找到的rectangular保存左下角和右上角x,y的坐标。

     4.把找到的rectangular进行两两判断是否符合条件,找到最大的面积和。

     5.注意2个rectangular嵌套的情况也是符合条件的,并且只算大的rectangular的面积。

代码如下:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 struct Pillar
 8 {
 9     int x;
10     int y;
11 }pillar[35];
12 
13 struct Rect
14 {
15     int x1;
16     int y1;
17     int x2;
18     int y2;
19 }rect[1000];
20 
21 int mp[210][210];
22 
23 int main()
24 {
25     int n;
26     while (scanf("%d", &n) && n)
27     {
28         int l = 0;
29         memset(mp, 0, sizeof(mp));
30         int i, j, k;
31         for (i = 0; i < n; i++)
32         {
33             scanf("%d%d", &pillar[i].x, &pillar[i].y);
34             mp[pillar[i].x][pillar[i].y] = 1;
35         }
36         for (i = 0; i < n; i++)
37         {
38             for (j = pillar[i].x + 1; j <= 200; j++)
39             {
40                 if (mp[j][pillar[i].y])
41                 {
42                     for (k = pillar[i].y + 1; k <= 200; k++)
43                     {
44                         if (mp[pillar[i].x][k] && mp[j][k])
45                         {
46                             rect[l].x1 = pillar[i].x;
47                             rect[l].y1 = pillar[i].y;
48                             rect[l].x2 = j;
49                             rect[l].y2 = k;
50                             l++;
51                         }
52                     }
53                 }
54             }
55         }
56         int sum = 0;
57         for (i = 0; i < l; i++)
58         {
59             for (j = i + 1; j < l; j++)
60             {
61                 int s = 0;
62                 if ((rect[i].x1 - rect[j].x1) * (rect[i].x2 - rect[j].x2) < 0 && (rect[i].y1 - rect[j].y1) * (rect[i].y2 - rect[j].y2) < 0)
63                 {
64                     s = max((rect[i].y2 - rect[i].y1) * (rect[i].x2 - rect[i].x1), (rect[j].y2 - rect[j].y1) * (rect[j].x2 - rect[j].x1));
65                 }
66                 else if (rect[i].x1 > rect[j].x2 || rect[i].x2 < rect[j].x1 || rect[i].y1 > rect[j].y2 || rect[i].y2 < rect[j].y1)
67                 {
68                     s = (rect[i].y2 - rect[i].y1) * (rect[i].x2 - rect[i].x1) + (rect[j].y2 - rect[j].y1) * (rect[j].x2 - rect[j].x1);
69                 }
70                 sum = max(sum, s);
71             }
72         }
73         if (sum)
74         {
75             printf("%d\n", sum);
76         }
77         else
78         {
79             printf("imp\n");
80         }
81     }
82 
83 
84     return 0;
85 }

AC如下:

bubuko.com,布布扣

 

The E-pang Palace

标签:style   blog   http   io   ar   color   sp   for   div   

原文地址:http://www.cnblogs.com/sunjieee/p/4151916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!