Наконец, на рынке появилась вакцина от COVID, и правительство Чефленда попросило вас разработать план ее распространения среди населения как можно скорее. Всего N человек в возрасте a1,a2,…,aN.
Есть только одна больница, где проводится вакцинация, и в день можно вакцинировать не более D человек. Любой человек в возрасте ≥80 или ≤9 лет считается в группе риска. В каждый день нельзя вакцинировать как человека, находящегося в группе риска, так и человека, не входящего в группу риска. Найдите наименьшее количество дней, необходимое для вакцинации всех.
Вход
- Первая строка входных данных содержит единственное целое число T, обозначающее количество тестовых случаев. Ниже приводится описание T тестовых случаев.
- Первая строка каждого набора входных данных содержит два целых числа, разделенных пробелом, NN и D.
- Во второй строке через пробел записаны N целых чисел a1,a2,…,aN.
Вывод
Для каждого набора входных данных выведите одну строку, содержащую одно целое число ― наименьшее требуемое количество дней.
Ограничения
- 1≤T≤10
- 1≤N≤10⁴
- 1≤D≤10⁵
- 1≤ai≤100 для каждого действительного i
Подзадачи
Подзадача №1 (100 баллов): исходные ограничения
Пример ввода
2
10 1
10 20 30 40 50 60 90 80 100 1
5 2
9 80 27 72 79
Пример вывода
10
3
Объяснение
Пример 1: нам не нужно беспокоиться о том, как люди сгруппированы, поскольку за один день можно вакцинировать только одного человека. Нам нужно столько дней, сколько людей.
Пример 2. Есть два человека, которым угрожает опасность, и трое, которые не входят в группу риска. Одной из оптимальных стратегий является вакцинация двух человек из группы риска в 1-й день и оставшихся троих в следующие 2 дня.
РЕШЕНИЕ:
#include <iostream> using namespace std; #include<cmath> #define ll long long int int main() { //ios_base::sync_with_stdio(false); //cin.tie(NULL); // your code goes here ll t, D, N; cin >> t; while(t--) { N=0;D=0; cin >> N >> D; ll arr[N], Atrist = 0, Notrisk = 0; for( int i = 0; i < N; i++) { cin >> arr[i]; if(arr[i] >= 80 || arr[i] <= 9) Atrist++; else Notrisk++; } ll total = ceil((double)Atrist/(double)D) + ceil((double)Notrisk/(double)D); cout << total <<"\n"; } return 0; }
ССЫЛКА НА РЕШЕНИЕ:
Поддержите меня на:
Связаться: