Таксі#8352

Таксі (Розбір)

Нехай a, b, c — кількість людей в першій, другій та третій маршрутках. Для того щоб після пересадки кількість людей в маршрутках була однаковою, необхідно щоб сума a + b + c ділилася на .

Нехай d = (a + b + c) / 3 — кількість людей, яка повинна бути в кожній маршрутці після пересадки. Тоді з кожної маршрутки слід пересадити в якусь іншу стільки людей, щоб в ній залишилося рівно . Це можливо тільки якщо в маршрутці спочатку знаходиться більше пасажирів. Наприклад, з першої маршрутки слід пересадити a - d людей, якщо тільки a > d. З другої маршрутки слід пересадити b - d людей (якщо b > d). З третьої маршрутки слід пересадити c - d людей (якщо c > d).

Реалізація алгоритму

Читаємо вхідні дані.

scanf("%d %d %d",&a,&b,&c);

Якщо загальна сума людей не ділиться на , то виводимо IMPOSSIBLE.

if((a + b + c) % 3 != 0)
  puts("IMPOSSIBLE");
else
{
  res = 0;

Визначаємо кількість людей в маршрутках після пересадки.

  d = (a + b + c) / 3;

У змінній рахуватимемо кількість пересаджуваних людей.

  if (a > d) res += a - d;
  if (b > d) res += b - d;
  if (c > d) res += c - d;

Виводимо відповідь.

  printf("%d\n",res);
}

Python реалізація

Читаємо вхідні дані.

a, b, c = map(int, input().split())

Якщо загальна сума людей не ділиться на , то виводимо IMPOSSIBLE.

if (a + b + c) % 3 != 0:
  print("IMPOSSIBLE")
else:
  res = 0

Визначаємо кількість людей в маршрутках після пересадки.

  d = (a + b + c) // 3

У змінній рахуватимемо кількість пересаджуваних людей.

  if a > d: res += a – d
  if b > d: res += b – d
  if c > d: res += c – d

Виводимо відповідь.

  print(res)