Светофор на кольцевой площади
Условие
На кольцевой площади в городе поставили «умный» светофор, но он работает по простому циклу.
В момент времени 0 он загорается красным и горит ровно R секунд, потом зелёным ровно G секунд, потом снова красным R секунд, и так по кругу без пауз.
Петя пришёл на площадь в момент времени T (в секундах) и хочет понять, какой свет горит ровно в этот момент.
Важно: значения времени могут быть больше 32-битного типа (как на олимпиадах), используйте 64-битные целые. В Python это не проблема.
Формат ввода
В одной строке записаны три целых числа R, G, T.
Формат вывода
Выведите одно слово:
RED, если в моментTгорит красный,GREEN, если в моментTгорит зелёный.
Ограничения
1 ≤ R ≤ 1001 ≤ G ≤ 1000 ≤ T ≤ 1000000000
Пример
Ввод:
3 2 4
Вывод:
GREENКак решать — идея подхода
Приём: Остаток по модулю (периодичность)
Ключевое наблюдение: работа светофора периодична. После R+G секунд состояние повторяется, значит важен не сам T, а его положение внутри текущего цикла.
Приём: берём остаток от деления T на длину периода P = R + G. Остаток x = T % P показывает, сколько секунд прошло с начала «своего» цикла. В каждом цикле первые R секунд горит красный, следующие G секунд — зелёный. Поэтому достаточно сравнить x с R.
План решения:
- Считать
R,G,T. - Посчитать период
P = R + G. - Найти позицию в периоде:
x = T % P. - Если
x < R, вывестиRED, иначе вывестиGREEN.
Мини-сниппет логики:
x = T % (R + G)x < R -> RED, иначе GREEN
Сложность: O(1) по времени и O(1) по памяти.
Частая ошибка: перепутать границу в момент переключения. В момент T = R красный уже закончился и начинается зелёный, поэтому условие строгое: x < R, а не x <= R.
Разберись руками
Светофор повторяет цикл: сначала 3 секунды красный, потом 2 секунды зелёный, и так снова. Петя смотрит на него ровно в момент T = 4 секунды и хочет понять, какой цвет горит в эту секунду.
- Сколько секунд длится один полный цикл «красный+зелёный», если красный 3 секунды, а зелёный 2 секунды?
- Момент T = 4. Сколько это секунд «внутри текущего цикла», если каждый цикл по 5 секунд? (То есть найди остаток от деления 4 на 5.)
- В одном цикле секунды 0,1,2 — красный (их ровно 3), а секунды 3,4 — зелёный (их ровно 2). Если внутри цикла у нас получилось 4, какой цвет горит?
Идея: Сначала находишь длину одного полного повторяющегося цикла. Потом выкидываешь все целые циклы из момента времени и смотришь только на то, что осталось внутри одного цикла. По этому положению внутри цикла решаешь, попал ли момент в красную часть или в зелёную.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Родителям: подготовка бесплатно — сколько стоит репетитор, что даёт бесплатный маршрут и как понять, что ребёнок занимается
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели