• LA 3695 Distant Galaxy


    https://icpcarchive.ecs.baylor.edu/index.php?option=onlinejudge&page=show_problem&problem=1696

      今天还做回以前做过的一道题。

      这题主要是离散化,然后将点的个数转化为前缀和。

    View Code
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <vector>
     6 #include <map>
     7 
     8 using namespace std;
     9 typedef vector<int> VI;
    10 
    11 #define REP(i, n) for (int i = 0; i < (n); i++)
    12 #define REP_1(i, n) for (int i = 1; i <= (n); i++)
    13 #define INC(i, a, b) for (int i = (a); i <= (b); i++)
    14 #define DEC(i, a, b) for (int i = (a); i >= (b); i--)
    15 #define PB push_back
    16 #define _clr(x) memset(x, 0, sizeof(x))
    17 #define SZ(x) ((int) (x).size())
    18 #define ALL(x) (x).begin(), (x).end()
    19 
    20 const int N = 111;
    21 VI X, Y;
    22 map<int, int> NX, NY;
    23 int x[N], y[N];
    24 int mat[N][N], preSum[N][N];
    25 
    26 void input(int n) {
    27     NX.clear();
    28     NY.clear();
    29     X.clear();
    30     Y.clear();
    31     REP(i, n) {
    32         cin >> x[i] >> y[i];
    33         X.PB(x[i]);
    34         Y.PB(y[i]);
    35     }
    36     sort(ALL(X));
    37     sort(ALL(Y));
    38     int t = unique(ALL(X)) - X.begin();
    39     while (SZ(X) > t) X.pop_back();
    40     REP(i, t) {
    41         NX[X[i]] = i + 1;
    42     }
    43     t = unique(ALL(Y)) - Y.begin();
    44     while (SZ(Y) > t) Y.pop_back();
    45     REP(i, t) {
    46         NY[Y[i]] = i + 1;
    47     }
    48     _clr(mat);
    49     REP(i, n) {
    50         mat[NX[x[i]]][NY[y[i]]] = 1;
    51     }
    52 //    REP_1(i, SZ(X)) {
    53 //        REP_1(j, SZ(Y)) {
    54 //            cout << mat[i][j];
    55 //        }
    56 //        cout << endl;
    57 //    }
    58 }
    59 
    60 int work() {
    61     int nx = SZ(X), ny = SZ(Y), mx = 0;
    62     if (nx <= 1 || ny <= 1) return max(SZ(X), SZ(Y));
    63     REP_1(i, nx) {
    64         REP_1(j, ny) {
    65             preSum[i][j] = preSum[i - 1][j] + mat[i][j];
    66         }
    67     }
    68 //    REP_1(i, nx) {
    69 //        REP_1(j, ny) {
    70 //            cout << preSum[i][j];
    71 //        }
    72 //        cout << endl;
    73 //    }
    74     int sum, mn;
    75     REP_1(x1, nx) {
    76         INC(x2, x1 + 1, nx) {
    77             sum = 0;
    78             mn = 999999;
    79             REP_1(y, ny) {
    80                 mx = max(mx, sum + preSum[x2][y] - preSum[x1 - 1][y] - mn);
    81                 mn = min(mn, sum - preSum[x2 - 1][y] + preSum[x1][y]);
    82                 sum += mat[x1][y] + mat[x2][y];
    83             }
    84         }
    85     }
    86     return mx;
    87 }
    88 
    89 int main() {
    90 //    freopen("in", "r", stdin);
    91     int n, cas = 1;
    92     while (cin >> n && n) {
    93         input(n);
    94         cout << "Case " << cas++ << ": " << work() << endl;
    95     }
    96     return 0;
    97 }

    ——written by Lyon

  • 相关阅读:
    Warning: 执行完毕, 但带有警告 trigger trigger_EqPic_insert 已编译。
    c#生成cad缩略图或者图片
    ORACLE ROWNUM解析[转]
    集合已修改;可能无法执行枚举操作。
    JS 变量是否有值的判断
    简单方法解决bootstrap3 modal异步加载只一次的问题
    System.Data.DbType映射关系
    sql zhuan ORACLE
    Enterprise Library
    sql server转oracle需要注意的几点
  • 原文地址:https://www.cnblogs.com/LyonLys/p/LA_3695_Lyon.html
Copyright © 2020-2023  润新知