На торжественном
открытии олимпиады, впрочем, как и на её закрытии, спортсмены каждой страны
были одеты в одинаковые олимпийские костюмы. Естественно, что при таком большом
количестве спортсменов, тренеров и обслуживающего персонала, для многих стран
сам процесс пошивки олимпийской парадной формы был довольно ответственным и
важным делом, и поэтому необходимо было знать рост каждого члена делегации для
пошивки формы соответствующего размера. Фирмам, которые будут заниматься пошивом
парадной формы, частично повезло, так как известно, что ни в одной делегации не
было членов делегации ростом ниже полутора метров и выше двух с половиной.
У вас в
распоряжении имеется база данных, в которую занесены рост каждого члена
делегации по соответствующему виду спорта. Ваша задача быстро отвечать на
запросы типа: А сколько членов делегации имеют рост в пределах от a до b
сантиметров включительно?
Вход. Первая строка
каждого запроса содержит единственное число n (1 ≤ n
≤ 20000) – количество членов соответствующей делегации. Во второй строке
запроса содержится n целых чисел, разделённых единичным пробелом – рост
соответствующего члена делегации в сантиметрах. Данные о росте не
отсортированы, так как помещались в базу данных в последний момент и не были
поэтому обработаны. Третья строка запроса содержит собственно сам запрос: 2
числа – нижняя и верхняя границы интересующего фирму – изготовитель ростового интервала.
Выход. Для каждого запроса в отдельной строке выведите ответ на
него.
Пример
входа |
Пример
выхода |
7 153 168 155
167 155 167 155 165 170 6 189 191 169
190 192 191 165 172 |
3 1 |
РЕШЕНИЕ
массив
Считываем рост
членов делегаций в линейный массив. Затем проходим по нему, подсчитывая
количество элементов в промежутка от a
до b включительно.
Объявим массив
для хранения роста членов делегаций.
#define MAX 20010
int m[MAX];
Читаем входные
данные. Обрабатываем несколько тестов.
while(scanf("%d",&n)
== 1)
{
for(i = 0; i < n; i++) scanf("%d",&m[i]);
scanf("%d %d",&a,&b);
В переменной cnt подсчитываем
количество элементов m[i] в промежутке от a до
b включительно.
for(cnt = i = 0; i < n; i++)
if ((m[i] >= a) && (m[i]
<= b)) cnt++;
Выводим ответ.
printf("%d\n",cnt);
}
#include <stdio.h>
int i, n, a, b, cnt;
int *m;
int main(void)
{
while(scanf("%d",&n)
== 1)
{
m = new int[n];
for(i = 0; i < n; i++)
scanf("%d",&m[i]);
scanf("%d %d",&a,&b);
for(cnt = i = 0; i < n; i++)
if ((m[i] >= a) && (m[i]
<= b)) cnt++;
printf("%d\n",cnt);
delete
[] m;
}
return 0;
}
#include <cstdio>
#include <vector>
using namespace std;
int i, n, a, b, cnt;
vector<int>
m;
int main(void)
{
while(scanf("%d",&n)
== 1)
{
m.resize(n);
for(i = 0; i < n; i++)
scanf("%d",&m[i]);
scanf("%d %d",&a,&b);
for(cnt = i = 0; i < n; i++)
if ((m[i] >= a) && (m[i]
<= b)) cnt++;
printf("%d\n",cnt);
}
return 0;
}
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner
con = new Scanner(System.in);
while(con.hasNextInt())
{
int cnt, i, n = con.nextInt();
int m[] = new int[n];
for(i = 0; i < n; i++)
m[i] = con.nextInt();
int a = con.nextInt();
int b = con.nextInt();
for(cnt = i = 0; i < n; i++)
if ((m[i] >= a) && (m[i] <= b)) cnt++;
System.out.println(cnt);
con.close();
}
}
}
Java реализация
через BufferedReader
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader read =
new BufferedReader(new
InputStreamReader(System.in));
//BufferedReader read =
// new
BufferedReader(new FileReader ("3607.in"));
while(read.ready())
{
int cnt = 0, i, n = Integer.parseInt(read.readLine());
int mas[] = new int[n];
String s[] = read.readLine().split(" ");
for(i = 0; i < n; i++)
mas[i] = Integer.parseInt(s[i]);
s = read.readLine().split(" ");
int a = Integer.parseInt(s[0]),
b = Integer.parseInt(s[1]);
for(i = 0; i < n; i++)
if ((mas[i] >= a) && (mas[i] <= b)) cnt++;
System.out.println(cnt);
}
}
}