Задача B. Рада школи
Ім’я вхідного
файлу: іnput.txt
Ім’я вхідного
файлу: output.txt
Ліміт часу: 1 с.
До керівництва ради
школи входять батьки, учні та вчителі, причому батьків повинно бути не менше
1/3 від загальної кількості членів ради. На поточний момент часу до ради школи
входить N людей, з них K батьків. Визначте, скільки батьків потрібно додатково
ввести в число ради школи, щоб їх кількість була не меншою 1/3 від загального
числа всіх учасників.
Вхідні дані
Вхідні дані містять
два числа N і K (N › 0, 0 ≤ K ≤ N≤100000) записані через пропуск.
Вихідні дані
Вихідні дані
містять одне число - мінімальна кількість батьків, яких потрібно долучити до
числа ради школи.
Приклад
іnput.txt
|
output.txt
|
27 7
|
3
|
Ідея: задача нескладна у реалізації, але спочатку
треба скласти нерівність, яку слід перевірити в програмі.
Складемо рівняння кількості людей: учні_вчителі + батьки + додаткові_батьки =
всі,
або в математичних позначеннях n-k + k +Dk = Z.
Згідно умови задачі має виконуватись
нерівність:
або в математичних позначеннях k +Dk ³ 1/3 Z.
Якщо з рівняння підставити вираз у
нерівність замість Z (позбуваємось невідомих змінних), тоді
k +Dk ³ 1/3 (n-k + k +Dk).
Отримане рівняння потрібно
спростити, а також позбутись ділення (домножити на «3» ліву та праві
частини: задача вимагає точного
розв’язку, а дріб в результаті ділення 1 на 3 для цілих чисел перетвориться на
0 і перетворить всю ліву частину нерівності на 0, що не дасть змоги розв’язати
задачу).
Отже:
3k +3Dk ³ n +Dk Þ 2Dk ³ n - 3k –
за такої умови існує відповідь. Щоб знайти
Dk слід виконати алгоритм:
почати з Dk=1;
поки (2Dk < n
-3k) збільшити Dk на 1.
Коли 2Dk < n -3k перестане виконуватись, тоді це означатиме,
що ми «добрались» до такого Dk, що виконується 2Dk ³ n -3k , тобто відповідь знайдена.
#include <stdio.h>
//----------------------------------------
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int k, n;
scanf("%d%d", &n, &k);
int deltaK = 1;
while(2*deltaK<n-3*k)
deltaK++;
printf("%d\n", deltaK);
return 0;
}
Немає коментарів:
Дописати коментар