Розв’язок олімпіадної задачі з програмування Звичайна арифметика
14 Листопада, 2019Розв’язок олімпіадної задачі з програмування Суддя
15 Листопада, 2019Розв'язок олімпіадної задачі пробного туру з програмування 2019 року "Цукерки"
Використовується мова програмування Python 3
Правильність розв'язку - 72/100
Цукерки
На столі стоять три вази з цукерками. В лівій вазі лежить A цукерок, в середній вазі - В цукерок, в правій вазі відповідно С цукерок. Степан зїдає одну цукерку з лівої вази, потім - одну цукерку з середньої вази, потім з правої, середньої, лівої, середньої, правої, середньої і т.д. (зліва направо, потім наліво, знову направо і т.д.).
Якщо Степан хоче взяти цукерку з якоїсь вази, а там її немає, то він засмучується і йде спати. Визначте скільки цукерок зїсть Степан
Формат вхідних даних:
Дано 3 цілих невід'ємних числа A, B, C (A+B+C ≤ 2*109) кількість цукерок відповідно в лівій, середній та правій вазі)
Формат вихідних даних:
Oдне число - кількість цукерок, які з'їв Степан.
Examples
Input
3 3 3
Output
7
Обмеження
Full score: 100
Time limit: 100 ms
Real time limit: 5 s
Memory limit: 64M
Розв'язок
A=int(input())
B=int(input())
C=int(input())
k=0
while A!=0:
k = k + 1
A = A - 1
if B == 0:
break
k=k+1
B = B - 1
if C == 0:
break
k=k+1
C = C - 1
if B == 0:
break
k=k+1
B = B - 1
print(k)




1 Comment
Для вирішення задачі ми можемо використати математичний підхід. Ключовим моментом є визначення того, скільки повних циклів “ліва, середня, права, середня” (L, M, R, M) Степан зможе завершити, і скільки додаткових цукерок він з’їсть після останнього повного циклу. У кожному повному циклі використовуються 1 цукерка з лівої вази, 2 з середньої та 1 з правої.
Кількість можливих повних циклів обмежується найменшим ресурсом: A, B//2 (ділення націло) або C. Після визначення кількості повних циклів, ми симулюємо (або логічно обчислюємо) дії після них, поки не закінчиться якась ваза.