Juan Marquinho is a geologist and he needs to count rock samples in order to send it to a chemical laboratory. He has a problem: The laboratory only accepts rock samples by a range of its size in ppm (parts per million).
Juan Marquinho receives the rock samples one by one and he classifies the rock samples according to the range of the laboratory. This process is very hard because the number of rock samples may be in millions.
Juan Marquinho needs your help, your task is to develop a program to get the number of rocks in each of the ranges accepted by the laboratory.
Input Format:
An positive integer S (the number of rock samples) separated by a blank space, and a positive integer R (the number of ranges of the laboratory); A list of the sizes of S samples (in ppm), as positive integers separated by space R lines where the ith line containing two positive integers, space separated, indicating the minimum size and maximum size respectively of the ith range.
Output Format:
R lines where the ith line containing a single non-negative integer indicating the number of the samples which lie in the ith range.
Constraints:
10 ≤ S ≤ 10000 1 ≤ R ≤ 1000000 1≤size of each sample (in ppm) ≤1000
Example 1
Input:
10 2
345 604 321 433 704 470 808 718 517 811
300 350
400 700
Output:
2 4
Example 2
Input:
20 3
921 107 270 631 926 543 589 520 595 93 873 424 759 537 458
614 725 842 575 195
1 100
50 600
1 1000
Output:
1 12 20
Solution: In C
#include<stdio.h>
int main()
{
int a[100],b[100][100],n,i,r,j,k;
scanf("%d %d",&n,&r);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<r;i++)
for(j=0;j<=1;j++)
scanf("%d",&b[i][j]);
k=0;
for(i=0;i<r;i++)
{
int count=0;
for(j=0;j<n;j++)
if(a[j]>=b[i][k]&&a[j]<=b[i][k+1])
count++;
printf("%d ",count);
}
return 0;
}
Solution: In Java
import java.util.Scanner;
class Counting
{
public static void main (String[] args)
{
int arr[] = new int[50],range_arr[] = new int[50];
int size,range,i,j,count=0;
Scanner sc = new Scanner(System.in);
size = sc.nextInt();
range = sc.nextInt();
for(i = 0 ; i < size;i++)
arr[i] = sc.nextInt();
range=range*2;
for( i = 0; i < range ; i = i + 2)
{
range_arr[i] = sc.nextInt();
range_arr[i+1] = sc.nextInt();
for(j=0; j<size ; j++)
{
if((arr[j] >= range_arr[i]) && (arr[j] <= range_arr[i+1]))
count++;
}
System.out.printf("%d ",count);
count=0;
}
}
}
Solution: In Python 3
samples, ranges =[int(i) for i in input().split()]
count = 0
final = []
arr = list(map(int, input().split()))
for i in range(0, ranges):
range1, range2 = [int(i) for i in input().split()]
for j in range(0, samples):
if range1 <= arr[j] <= range2:
count = count + 1
final.append(count)
count = 0
for i in range(0, len(final)):
print(final[i], end=" ")
Also Checkout