Given the length and breadth of N rectangles and a range i.e. [a, b], the task is to count the number of rectangles whose sides(larger/smaller) ratio is in the range [a, b].
Examples:
Input: {{165, 100}, {180, 100}, {100, 170}}, a = 1.6, b = 1.7
Output: 2
165/100 = 1.65
170/100 = 1.7Input: {{10, 12}, {26, 19}}, a = 0.8, b = 1.2
Output: 1
Approach: Iterate in the array of pairs, and increase the counter when max(a[i].first, a[i].second)/min(a[i].first, a[i].second) lies in the range a and b.
Below is the implementation of the above approach:
// C++ program to print the length of the shortest // subarray with all elements greater than X #include <bits/stdc++.h> using namespace std;
// Function to count the number of ratios int countRatios(pair< int , int > arr[], int n,
double a, double b)
{ int count = 0;
// count the number of ratios
// by iterating
for ( int i = 0; i < n; i++) {
double large = max(arr[i].first, arr[i].second);
double small = min(arr[i].first, arr[i].second);
// find ratio
double ratio = large / small;
// check if lies in range
if (ratio >= a && ratio <= b)
count += 1;
}
return count;
} // Driver Code int main()
{ pair< int , int > arr[] = { { 165, 100 },
{ 180, 100 },
{ 100, 170 } };
double a = 1.6, b = 1.7;
int n = 3;
cout << countRatios(arr, n, a, b);
return 0;
} |
// Java program to print the length of the shortest // subarray with all elements greater than X class GFG
{ static int n = 3 ;
static class pair
{ int first, second;
public pair( int first, int second)
{
this .first = first;
this .second = second;
}
} // Function to count the number of ratios static int countRatios(pair []arr, int n,
double a, double b)
{ int count = 0 ;
// count the number of ratios
// by iterating
for ( int i = 0 ; i < n; i++)
{
double large = Math.max(arr[i].first,
arr[i].second);
double small = Math.min(arr[i].first,
arr[i].second);
// find ratio
double ratio = large / small;
// check if lies in range
if (ratio >= a && ratio <= b)
count += 1 ;
}
return count;
} // Driver Code public static void main(String[] args)
{ pair []arr = { new pair( 165 , 100 ),
new pair( 180 , 100 ),
new pair( 100 , 170 )};
double a = 1.6 , b = 1.7 ;
int n = 3 ;
System.out.println(countRatios(arr, n, a, b));
} } // This code is contributed by PrinciRaj1992 |
# Python3 program to print the # length of the shortest subarray # with all elements greater than X # Function to count the number of # ratios def countRatios(arr, n, a, b):
count = 0
# count the number of ratios
# by iterating
for i in range (n):
large = max (arr[i][ 0 ],
arr[i][ 1 ])
small = min (arr[i][ 0 ],
arr[i][ 1 ])
# find ratio
ratio = large / small
# check if lies in range
if (ratio > = a and
ratio < = b):
count + = 1
return count
# Driver Code if __name__ = = "__main__" :
arr = [[ 165 , 100 ],
[ 180 , 100 ],
[ 100 , 170 ]]
a = 1.6
b = 1.7
n = 3
print (countRatios(arr, n, a, b))
# This code is contributed by Chitranayal |
// C# program to print the length of the shortest // subarray with all elements greater than X using System;
class GFG
{ static int n = 3;
class pair
{ public int first, second;
public pair( int first, int second)
{
this .first = first;
this .second = second;
}
} // Function to count the number of ratios static int countRatios(pair []arr, int n,
double a, double b)
{ int count = 0;
// count the number of ratios
// by iterating
for ( int i = 0; i < n; i++)
{
double large = Math.Max(arr[i].first,
arr[i].second);
double small = Math.Min(arr[i].first,
arr[i].second);
// find ratio
double ratio = large / small;
// check if lies in range
if (ratio >= a && ratio <= b)
count += 1;
}
return count;
} // Driver Code public static void Main(String[] args)
{ pair []arr = { new pair(165, 100),
new pair(180, 100),
new pair(100, 170)};
double a = 1.6, b = 1.7;
int n = 3;
Console.WriteLine(countRatios(arr, n, a, b));
} } // This code is contributed by 29AjayKumar |
<script> // JavaScript program to print // the length of the shortest // subarray with all elements greater than X // Function to count the number of ratios function countRatios(arr,n,a,b)
{ let count = 0;
// count the number of ratios
// by iterating
for (let i = 0; i < n; i++)
{
let large = Math.max(arr[i][0],
arr[i][1]);
let small = Math.min(arr[i][0],
arr[i][1]);
// find ratio
let ratio = large / small;
// check if lies in range
if (ratio >= a && ratio <= b)
count += 1;
}
return count;
} // Driver Code let arr = [[165, 100], [180, 100],
[100, 170]];
let a = 1.6, b = 1.7; let n = 3; document.write(countRatios(arr, n, a, b)); // This code is contributed by avanitrachhadiya2155 </script> |
2
Time Complexity: O(n)
Auxiliary Space: O(1)