Задача
У годину пік на зупинку одночасно під’їхали три маршрутних таксі, які слідують по одному маршруту, в які тут же набилися пасажири. Водії виявили, що кількість людей у різних маршрутках різна, і вирішили пересадити частину пасажирів так, щоб у кожній маршрутці було порівну пасажирів. Потрібно визначити, яку найменшу кількість пасажирів доведеться при цьому пересадити.
Вхідні дані
Три натуральних числа, що не перевищують [latex]100[/latex] — кількості пасажирів у першій, другій і третій маршрутках відповідно.
Вихідні дані
Виведіть одне число — найменшу кількість пасажирів, яку потрібно пересадити. Якщо це неможливо, виведіть слово [latex]IMPOSSIBLE[/latex] (великими літерами).
Тести
Вхідні дані | Вихідні дані |
[latex]1[/latex] [latex]1[/latex] [latex]4[/latex] | [latex]2[/latex] |
[latex]1[/latex] [latex]2[/latex] [latex]4[/latex] | [latex]IMPOSSIBLE[/latex] |
[latex]1[/latex] [latex]3[/latex] [latex]5[/latex] | [latex]2[/latex] |
[latex]9[/latex] [latex]3[/latex] [latex]9[/latex] | [latex]4[/latex] |
Код програми
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.io.*; import java.util.Scanner; import java.lang.Math; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int m1,m2,m3,x; m1 = in.nextInt(); m2 = in.nextInt(); m3 = in.nextInt(); if ( ( m1 + m2 + m3 ) % 3 == 0 ) { if ( m1 != m2 && m1 != m3 && m2 != m3 ) { System.out.print(Math.max ( Math.max ( m1 , m2 ) , m3 ) - ( ( m1 + m2 + m3 ) / 3 )); } else if ( m1 == m2 ) { x = ( m3 - ( m1 + m2 + m3 ) / 3 ); if ( x < 0 ) { System.out.print(-x); } else System.out.print(x); } else if ( m1 == m3 ) { x = ( m2 - ( m1 + m2 + m3 ) / 3 ); if ( x < 0 ) { System.out.print(-x); } else System.out.print(x); } else if ( m2 == m3 ) { x = ( m1 - ( m1 + m2 + m3 ) / 3 ); if ( x < 0 ) { System.out.print(-x); } else System.out.print(x); } } else System.out.print("IMPOSSIBLE"); } } |
Рішення завдання
Спочатку відріжемо усі варіанти при яких розподілити пасажирів порівну не вийде так, що коли іх загальна кількість не ділиться націло на [latex]3[/latex] виводимо [latex]IMPOSSIBLE[/latex]. Коли розподілити пасажирів можна, розглядаємо [latex]4[/latex] випадки : коли у різних маршрутках кількість людей різна та коли у будь-яких двох маршрутках кількість однакова. Коли кількість різна, від максимальної кількості людей у трьох маршрутках віднімаємо число, яке дорівнює [latex]{{1}\over{3}}[/latex] від загальної кількості людей(у кінці ми маємо отримати це число, як кількість пасажирів у всіх маршрутних таксі), коли у двох маршрутках кількість однакова , то від кількості людей(у маршрутці, де іх більше або менше) віднімаємо число, яке дорівнює [latex]{{1}\over{3}}[/latex] від загальної кількості людей. Якщо відповідь менше [latex]0[/latex] то помножуюмо на [latex]-1[/latex].
Посилання
Умова завдання на e-olymp.com.
Код рішення на ideone.com.