• 【HDOJ】5128


    暴力+计算几何。

      1 /* 5128 */
      2 #include <iostream>
      3 #include <algorithm>
      4 #include <cstdio>
      5 #include <cstring>
      6 #include <cstdlib>
      7 using namespace std;
      8 
      9 typedef struct point {
     10     int x, y;
     11     point() {}
     12     point(int xx, int yy) {
     13         x = xx; y = yy;
     14     }
     15     friend bool operator <(const point &a, const point &b) {
     16         if (a.x == b.x)
     17             return a.y < b.y;
     18         else
     19             return a.x < b.x;
     20     }
     21 } point;
     22 
     23 typedef struct {
     24     point v[4];
     25 } square_t ;
     26 
     27 #define MAXN 35
     28 
     29 int n, m;
     30 point p[MAXN];
     31 point sq[4];
     32 square_t q[10005];
     33 
     34 bool isSquare() {
     35     if (sq[0].x!=sq[1].x || sq[0].y!=sq[2].y || sq[1].y!=sq[3].y || sq[2].x!=sq[3].x)
     36         return false;
     37     return sq[0].x!=sq[3].x && sq[0].y!=sq[3].y;
     38 }
     39 
     40 bool isTouch(int i, int j) {
     41     for (int u=0; u<4; ++u) {
     42         for (int v=0; v<4; ++v) {
     43             if (q[i].v[u].x==q[j].v[v].x && q[i].v[u].y==q[j].v[v].y)
     44                 return true;
     45         }
     46     }
     47     if ((q[i].v[0].x==q[j].v[0].x || q[i].v[2].x==q[j].v[0].x || q[i].v[0].x==q[j].v[2].x || q[i].v[2].x==q[j].v[2].x) && !(q[j].v[0].y>q[i].v[3].y || q[i].v[0].y>q[j].v[3].y))
     48         return true;
     49     if ((q[i].v[0].y==q[j].v[0].y || q[i].v[2].y==q[j].v[0].y || q[i].v[0].y==q[j].v[2].y || q[i].v[2].y==q[j].v[2].y) && !(q[j].v[0].x>q[i].v[3].x || q[i].v[0].x>q[j].v[3].x))
     50         return true;
     51     return false;
     52 }
     53 
     54 bool isCross(int i, int j) {
     55     return q[i].v[0].x<=q[j].v[0].x && q[i].v[0].y<=q[j].v[0].y && q[i].v[3].x>=q[j].v[0].x && q[i].v[3].x>=q[j].v[0].y && q[i].v[3].x<=q[j].v[3].x && q[i].v[3].y<=q[j].v[3].y;
     56 }
     57 
     58 bool isIncluded(int i, int j) {
     59     return q[i].v[0].x<q[j].v[0].x && q[i].v[0].y<q[j].v[0].y && q[i].v[3].x>q[j].v[3].x && q[i].v[3].y>q[j].v[3].y;
     60 }
     61 
     62 int main() {
     63     int i, j, k, r;
     64     int ans;
     65     
     66     #ifndef ONLINE_JUDGE
     67         freopen("data.in", "r", stdin);
     68         freopen("data.out", "w", stdout);
     69     #endif
     70     
     71     while (scanf("%d",&n)!=EOF && n) {
     72         for (i=0; i<n; ++i)
     73             scanf("%d %d", &p[i].x, &p[i].y);
     74         if (n < 8) {
     75             puts("imp");
     76             continue;
     77         }
     78         sort(p, p+n);
     79         m = 0;
     80         for (i=0; i<n; ++i) {
     81             for (j=0; j<n; ++j) {
     82                 if (i == j)
     83                     continue;
     84                 for (k=0; k<n; ++k) {
     85                     if (k==i || k==j)
     86                         continue;
     87                     for (r=0; r<n; ++r) {
     88                         if (r==i || r==j || r==k)
     89                             continue;
     90                         sq[0] = p[i];
     91                         sq[1] = p[j];
     92                         sq[2] = p[k];
     93                         sq[3] = p[r];
     94                         sort(sq, sq+4);
     95                         if (isSquare()) {
     96                             q[m].v[0] = sq[0];
     97                             q[m].v[1] = sq[1];
     98                             q[m].v[2] = sq[2];
     99                             q[m].v[3] = sq[3];
    100                             ++m;
    101                         }
    102                     }
    103                 }
    104             }
    105         }
    106         ans = -1;
    107         for (i=0; i<m; ++i) {
    108             for (j=0; j<m; ++j) {
    109                 if (i == j)
    110                     continue;
    111                 if (isTouch(i, j) || isCross(j, i) || isCross(i, j))
    112                     continue;
    113                 if (isIncluded(i, j)) {
    114                     k = (q[i].v[3].x - q[i].v[0].x) * (q[i].v[3].y - q[i].v[0].y);
    115                 } else if (isIncluded(j, i)) {
    116                     k = (q[j].v[3].x - q[j].v[0].x) * (q[j].v[3].y - q[j].v[0].y);
    117                 } else {
    118                     k = (q[i].v[3].x - q[i].v[0].x) * (q[i].v[3].y - q[i].v[0].y) +
    119                         (q[j].v[3].x - q[j].v[0].x) * (q[j].v[3].y - q[j].v[0].y);
    120                 }
    121                 if (k > ans)
    122                     ans = k;
    123             }
    124         }
    125         if (ans < 0)
    126             puts("imp");
    127         else
    128             printf("%d
    ", ans);
    129     }
    130     
    131     return 0;
    132 }
  • 相关阅读:
    LeetCode 70
    LeetCode 81
    LeetCode 33
    LeetCode 78
    LeetCode 50
    LeetCode 34
    关于机器学习的学习笔记
    图的 DFS 与 BFS 复杂度分析
    Sqlalchemy的学习使用和常见问题
    mysql的使用和远程连接
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4316661.html
Copyright © 2020-2023  润新知