Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Minimum length of square to contain at least half of the given Coordinates

  • Last Updated : 11 May, 2021

Given a set of N points in the 2-D plane. The task is to find the minimum value of M such that a square centered at the origin with side 2*M contains at least floor(N/2) points inside or on it.

Examples:  

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input : N = 4 
Points are: {(1, 2), (-3, 4), (1, 78), (-3, -7)} 
Output :
The square with end point (4, 4), (-4, -4), (4, -4), (-4, 4) will contain the points (1, 2) and (-3, 4). 
Smallest Possible value of M such that the square has at least 2 points is 4.
Input : N = 3 
Points are: {(1, 2), (-3, 4), (1, 78)} 
Output :
Square contains the point (1, 2). {floor(3/2) = 1}  



Approach:  

  1. One major observation for any point (x, y), minimum M in which this point lies is max(abs(x), abs(y)).
  2. Using point 1. We can find the minimum value of M for all the points and store them in an array.
  3. Sort the array.
  4. Now, array[i] denotes minimum M such that if i points are required in the square of side 2*M. (as all the points below i have the minimum value of M less than or equal to i).
  5. Print the value of array[floor(n/2)].

Below is the implementation of the above approach: 

C++




// C++ implementation of the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to Calculate Absolute Value
int mod(int x)
{
    if (x >= 0)
        return x;
    return -x;
}
 
// Function to Calculate the Minimum value of M
void findSquare(int n)
{
    int points[n][2] = { { 1, 2 }, { -3, 4 },
                       { 1, 78 }, { -3, -7 } };
    int a[n];
 
    // To store the minimum M for each
    // point in array
    for (int i = 0; i < n; i++) {
        int x, y;
        x = points[i][0];
        y = points[i][1];
        a[i] = max(mod(x), mod(y));
    }
 
    // Sort the array
    sort(a, a + n);
 
    // Index at which atleast required point are
    // inside square of length 2*M
    int index = floor(n / 2) - 1;
    cout << "Minimum M required is: " << a[index] << endl;
}
 
// Driver Code
int main()
{
    int N;
    N = 4;
    findSquare(N);
 
    return 0;
}

Java




import java.util.*;
 
// Java program to find next identical year
class GFG
{
 
// Function to Calculate Absolute Value
static int mod(int x)
{
    if (x >= 0)
        return x;
    return -x;
}
 
// Function to Calculate the Minimum value of M
static void findSquare(int n)
{
    int points[][] = { { 1, 2 }, { -3, 4 },
                    { 1, 78 }, { -3, -7 } };
    int []a = new int[n];
 
    // To store the minimum M for each
    // point in array
    for (int i = 0; i < n; i++)
    {
        int x, y;
        x = points[i][0];
        y = points[i][1];
        a[i] = Math.max(mod(x), mod(y));
    }
 
    // Sort the array
    Arrays.sort(a);
 
    // Index at which atleast required point are
    // inside square of length 2*M
    int index = (int) (Math.floor(n / 2) - 1);
    System.out.println("Minimum M required is: " + a[index]);
}
 
// Driver Code
public static void main(String[] args)
{
    int N;
    N = 4;
    findSquare(N);
}
}
 
// This code contributed by Rajput-Ji

Python3




# Python3 implementation of the
# above approach
 
# Function to Calculate the
# Minimum value of M
def findSquare(n):
 
    points = [[1, 2], [-3, 4],
              [1, 78], [-3, -7]]
    a = [None] * n
 
    # To store the minimum M
    # for each point in array
    for i in range(0, n):
        x = points[i][0]
        y = points[i][1]
        a[i] = max(abs(x), abs(y))
     
    # Sort the array
    a.sort()
 
    # Index at which atleast required
    # point are inside square of length 2*M
    index = n // 2 - 1
    print("Minimum M required is:", a[index])
 
# Driver Code
if __name__ == "__main__":
 
    N = 4
    findSquare(N)
     
# This code is contributed
# by Rituraj Jain

C#




// C# program to find next identical year
using System;
 
class GFG
{
 
// Function to Calculate Absolute Value
static int mod(int x)
{
    if (x >= 0)
        return x;
    return -x;
}
 
// Function to Calculate the Minimum value of M
static void findSquare(int n)
{
    int [,]points = new int[4,2]{ { 1, 2 }, { -3, 4 },
                    { 1, 78 }, { -3, -7 } };
    int []a = new int[n];
 
    // To store the minimum M for each
    // point in array
    for (int i = 0; i < n; i++)
    {
        int x, y;
        x = points[i,0];
        y = points[i,1];
        a[i] = Math.Max(mod(x), mod(y));
    }
 
    // Sort the array
    Array.Sort(a);
 
    // Index at which atleast required point are
    // inside square of length 2*M
    int index = (int) (n / 2 - 1);
    Console.WriteLine("Minimum M required is: " + a[index]);
}
 
// Driver Code
public static void Main(String []args)
{
    int N;
    N = 4;
    findSquare(N);
}
}
 
// This code contributed by Arnab Kundu

PHP




<?php
// PHP implementation of the above approach
 
// Function to Calculate Absolute Value
function mod($x)
{
    if ($x >= 0)
        return $x;
    return -$x;
}
 
// Function to Calculate the
// Minimum value of M
function findSquare($n)
{
    $points = array(array( 1, 2 ),
                    array( -3, 4 ),
                    array( 1, 78 ),
                    array( -3, -7 ));
    $a[$n] = array();
 
    // To store the minimum M for each
    // point in array
    for ($i = 0; $i < $n; $i++)
    {
        $x; $y;
        $x = $points[$i][0];
        $y = $points[$i][1];
        $a[$i] = max(mod($x), mod($y));
    }
 
    // Sort the array
    sort($a);
 
    // Index at which atleast required point
    // are inside square of length 2*M
    $index = floor($n / 2) - 1;
    echo "Minimum M required is: ",
                  $a[$index], "\n";
}
 
// Driver Code
$N = 4;
findSquare($N);
 
// This code is contributed by ajit.
?>

Javascript




<script>
    // Javascript program to find next identical year
     
    // Function to Calculate Absolute Value
    function mod(x)
    {
        if (x >= 0)
            return x;
        return -x;
    }
 
    // Function to Calculate the Minimum value of M
    function findSquare(n)
    {
        let points = [ [ 1, 2 ], [ -3, 4 ],
                        [ 1, 78 ], [ -3, -7 ] ];
        let a = new Array(n);
 
        // To store the minimum M for each
        // point in array
        for (let i = 0; i < n; i++)
        {
            let x, y;
            x = points[i][0];
            y = points[i][1];
            a[i] = Math.max(mod(x), mod(y));
        }
 
        // Sort the array
        a.sort(function(a, b){return a - b});
 
        // Index at which atleast required point are
        // inside square of length 2*M
        let index = (Math.floor(n / 2) - 1);
        document.write("Minimum M required is: " + a[index]);
    }
     
    let N;
    N = 4;
    findSquare(N);
 
         
</script>
Output: 
Minimum M required is: 4

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!