페이지

1438번: 가장 작은 직사각형

https://www.acmicpc.net/problem/1438


#include<cstdio>
#include<algorithm>
using namespace std;
int n, x[101] = { -1 }, y[101] = { -1 }, szx = 1, szy = 1, s[101][101], r = 1e9;
pair<intint> p[100];
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d%d", &p[i].first, &p[i].second);
        x[szx++] = p[i].first;
        y[szy++] = p[i].second;
    }
    sort(x, x + szx);
    sort(y, y + szy);
    szx = unique(x, x + szx) - x;
    szy = unique(y, y + szy) - y;
    for (int i = 0; i < n; i++) {
        int tx = lower_bound(x, x + szx, p[i].first) - x,
            ty = lower_bound(y, y + szy, p[i].second) - y;
        s[tx][ty]++;
    }
    for (int i = 1; i < szx; i++) {
        for (int j = 1; j < szy; j++) s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
    }
    for (int i = 1; i < szx; i++) {
        for (int j = 1; j < szy; j++) {
            int k = 0, l = j;
            while (l >= 0) {
                if (s[i][j] - s[k][j] - s[i][l] + s[k][l] < n / 2) l--;
                else {
                    r = min(r, (x[i] - x[k + 1] + 2)*(y[j] - y[l + 1] + 2));
                    k++;
                }
            }
        }
    }
    printf("%d", r);
    return 0;
}

댓글 없음 :

댓글 쓰기