• Axis-Parallel Rectangle


    D - Axis-Parallel Rectangle


    Time limit : 2sec / Memory limit : 256MB

    Score : 400 points

    Problem Statement

    We have N points in a two-dimensional plane.
    The coordinates of the i-th point (1≤iN) are (xi,yi).
    Let us consider a rectangle whose sides are parallel to the coordinate axes that contains K or more of the N points in its interior.
    Here, points on the sides of the rectangle are considered to be in the interior.
    Find the minimum possible area of such a rectangle.

    Constraints

    • 2≤KN≤50
    • −109≤xi,yi≤109(1≤iN)
    • xixj(1≤i<jN)
    • yiyj(1≤i<jN)
    • All input values are integers. (Added at 21:50 JST)

    Input

    Input is given from Standard Input in the following format:
    N K  
    x1 y1
    :  
    xN yN
    

    Output

    Print the minimum possible area of a rectangle that satisfies the condition.

    Sample Input 1

    Copy
    4 4
    1 4
    3 3
    6 2
    8 1
    

    Sample Output 1

    Copy
    21
    
    One rectangle that satisfies the condition with the minimum possible area has the following vertices: (1,1)(8,1)(1,4) and (8,4).
    Its area is (8−1)×(4−1)=21.

    Sample Input 2

    Copy
    4 2
    0 0
    1 1
    2 2
    3 3
    

    Sample Output 2

    Copy
    1
    

    Sample Input 3

    Copy
    4 3
    -1000000000 -1000000000
    1000000000 1000000000
    -999999999 999999999
    999999999 -999999999
    
    Sample Output 3
    3999999996000000001
    Watch out for integer overflows.
     
     
     
    // N 个点,选出一个最小的矩形,包括至少 k 个点,求这最小的矩形的面积
    // 枚举,疯狂枚举就行
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define MOD 998244353
     4 #define INF 0x3f3f3f3f3f3f3f3f
     5 #define LL long long
     6 #define MX 55
     7 struct Node
     8 {
     9     LL x, y;
    10     bool operator < (const Node &b)const{
    11         return x<b.x;
    12     }
    13 }pt[MX];
    14 
    15 int k, n;
    16 
    17 int main()
    18 {
    19     scanf("%d%d",&n,&k);
    20     for (int i=1;i<=n;i++)
    21         scanf("%lld%lld",&pt[i].x, &pt[i].y);
    22     sort(pt+1,pt+1+n);
    23     LL area = INF;
    24     for (int i=1;i<=n;i++)
    25     {
    26         for (int j=i+1;j<=n;j++)
    27         {
    28             LL miny = min(pt[i].y, pt[j].y);
    29             LL maxy = max(pt[i].y, pt[j].y);
    30             for (int q=1;q<=n;q++)
    31             {
    32                 if (pt[q].y>maxy||pt[q].y<miny) continue;
    33                 int tot = 0;
    34                 for (int z=q;z<=n;z++)
    35                 {
    36                     if (pt[z].y>maxy||pt[z].y<miny) continue;
    37                     tot++;
    38                     if (tot>=k)
    39                         area = min(area, (maxy-miny)*(pt[z].x-pt[q].x));
    40                 }
    41             }
    42         }
    43     }
    44     printf("%lld
    ",area);
    45     return 0;
    46 }
    View Code
     
     
  • 相关阅读:
    记录「十一月做题记录」
    题解「GMOJ6898 【2020.11.27提高组模拟】第二题」
    题解「CFGYM102331B Bitwise Xor」
    题解「Japan Alumni Group Summer Camp 2018 Day 2J AB Sort」
    题解「AGC048B Bracket Score」
    题解「中位数之中位数 median」
    记录「十月做题记录」
    测试「2020牛客NOIP赛前集训营-提高组(第五场)」
    测试「20201028测试总结」
    定时提醒助手
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/7673891.html
Copyright © 2020-2023  润新知