Check if it is possible to rearrange rectangles in a non-ascending order of breadths
Given n number of rectangles with it’s L-length and B-Breadth. We can turn any rectangle by 90 degrees. In other words, after turning them, the breadth will become length and length will be breadth.
The task is to check if there is a way to make the rectangles go in order of non-ascending breadth. That is, a breadth of every rectangle has to be not greater than the breadth of the previous rectangle.
Note: You can not change the order of the rectangles.
Examples:
Input: 3
l = 3, b = 4
l1 = 4, b1 = 6
l2 = 3, b2 = 5
Output: YES
The given breadths are [ 4, 6, 5 ] we can rotate the second and the third rectangle so that the breadths will satisfy the above condition [ 4, 4, 3 ] ( 3 is not greater than 4 and 4 is not greater than 4 ) which is why we print YES.
Input: 3
1 60
70 55
56 80
Output: NO
The breadths are [ 60, 55, 80 ] as 55 55 or 56 > 55. So it’s not possible to arrange the breadths in non-ascending order, which is why we’ll print NO.
Approach: Below is the step by step algorithm to solve this problem:
- Initialize n rectangle with their lengths and breadths.
- Iterate over the rectangle from left to right.
- Turn each rectangle in such a way that it’s breadth is as big as possible but not greater than the previous rectangle.
- If on some iteration there is no such way to place the rectangle, the answer is “NO”
Below is the implementation of above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int rotateRec( int n, int L[], int B[])
{
int m = INT_MAX;
for ( int i = 0; i < n; i++) {
if (max(L[i], B[i]) <= m)
m = max(L[i], B[i]);
else if (min(L[i], B[i]) <= m)
m = min(L[i], B[i]);
else {
return 0;
}
}
return 1;
}
int main()
{
int n = 3;
int L[] = { 5, 5, 6 };
int B[] = { 6, 7, 8 };
rotateRec(n, L, B) == 1 ? cout << "YES"
: cout << "NO" ;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int rotateRec( int n, int L[], int B[])
{
int m = Integer.MAX_VALUE;
for ( int i = 0 ; i < n; i++) {
if (Math.max(L[i], B[i]) <= m)
m = Math.max(L[i], B[i]);
else if (Math.min(L[i], B[i]) <= m)
m = Math.min(L[i], B[i]);
else {
return 0 ;
}
}
return 1 ;
}
public static void main (String[] args) {
int n = 3 ;
int L[] = { 5 , 5 , 6 };
int B[] = { 6 , 7 , 8 };
if (rotateRec(n, L, B) == 1 )
System.out.println( "YES" );
else
System.out.println( "NO" );
}
}
|
Python3
import sys;
def rotateRec(n, L, B):
m = sys.maxsize;
for i in range (n):
if ( max (L[i], B[i]) < = m):
m = max (L[i], B[i]);
elif ( min (L[i], B[i]) < = m):
m = min (L[i], B[i]);
else :
return 0 ;
return 1 ;
n = 3 ;
L = [ 5 , 5 , 6 ];
B = [ 6 , 7 , 8 ];
if (rotateRec(n, L, B) = = 1 ):
print ( "YES" );
else :
print ( "NO" );
|
C#
using System;
class GFG
{
static int rotateRec( int n, int []L,
int []B)
{
int m = int .MaxValue ;
for ( int i = 0; i < n; i++)
{
if (Math.Max(L[i], B[i]) <= m)
m = Math.Max(L[i], B[i]);
else if (Math.Min(L[i], B[i]) <= m)
m = Math.Min(L[i], B[i]);
else
{
return 0;
}
}
return 1;
}
public static void Main ()
{
int n = 3;
int []L = { 5, 5, 6 };
int []B = { 6, 7, 8 };
if (rotateRec(n, L, B) == 1)
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
}
}
|
PHP
<?php
function rotateRec( $n , $L , $B )
{
$m = PHP_INT_MAX;
for ( $i = 0; $i < $n ; $i ++)
{
if (max( $L [ $i ], $B [ $i ]) <= $m )
$m = max( $L [ $i ], $B [ $i ]);
else if (min( $L [ $i ], $B [ $i ]) <= $m )
$m = min( $L [ $i ], $B [ $i ]);
else
{
return 0;
}
}
return 1;
}
$n = 3;
$L = array (5, 5, 6 );
$B = array ( 6, 7, 8 );
if (rotateRec( $n , $L , $B ) == 1)
echo "YES" ;
else
echo "NO" ;
?>
|
Javascript
<script>
function rotateRec( n, L, B)
{
var m = Number.MAX_VALUE
for ( var i = 0; i < n; i++)
{
if (Math.max(L[i], B[i]) <= m)
m = Math.max(L[i], B[i]);
else if (Math.min(L[i], B[i]) <= m)
m = Math.min(L[i], B[i]);
else
{
return 0;
}
}
return 1;
}
var n = 3;
var L = [ 5, 5, 6 ];
var B = [ 6, 7, 8 ];
if (rotateRec(n, L, B) == 1)
document.write( "YES" );
else
document.write( "NO" );
</script>
|
Time Complexity: O(n), since there runs a loop for n times.
Auxiliary Space: O(1), since no extra space has been taken.
Last Updated :
20 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...