Вася устроился в одну из компаний ИТ-града, которая занимается машинным зрением. Команда, в которую попал Вася, занимается созданием программно-аппаратного комплекса для идентификации людей по лицу.
Одним из ноу-хау проекта является камера, вращающаяся вокруг оптической оси при съёмке. Люди видят диковинку — вращающуюся камеру — подходят к ней, чтобы лучше рассмотреть, смотрят прямо в неё. А камера их в это время снимает. Что может быть лучше для качественной идентификации?
Но не всё оказалось так просто. Вместе с камерой оказались повёрнуты и снимки, которые камера делает (при повороте камеры по часовой стрелке содержимое кадра оказывается повёрнуто против часовой стрелки). А алгоритм идентификации умеет работать только с лицами, незначительно отклонёнными от вертикали.
Васе поручили исправить недочёт — поворачивать снятую картинку так, чтобы изображение было отклонено как можно меньше от вертикали. При этом требования оказались довольно жёсткими. Во-первых, поворачивать картинку можно только на угол, кратный 90 градусам, чтобы ни в коем случае не утратить ни одного бита информации об изображении. Во-вторых, кадры с камеры оказались настолько большими, а кадров в секунду так много, что справиться с поворотом могло только аппаратное решение на основе FPGA, а это решение умеет поворачивать изображение только на 90 градусов по часовой стрелке. Конечно, поворот на 90 градусов по часовой стрелке можно применить несколько раз, но из соображений производительности лучше всё-таки минимизировать количество поворотов.
Помогите Васе реализовать программу, которая по углу поворота камеры определит, какое минимальное количество поворотов изображения на 90 градусов по часовой стрелке необходимо выполнить, чтобы получить картинку, на которой направление вверх как можно меньше отклонено от вертикали.
На следующем рисунке изображены кадры, полученные с не повёрнутой камеры, затем с повёрнутой на 90 градусов по часовой стрелке, затем с повёрнутой на 90 градусов в обратную сторону. Стрелками показано направление на «истинный верх».
На следующем рисунке изображён процесс поворота изображения на 90 градусов по часовой стрелке аппаратным решением на основе FPGA.
Единственная строка входных данных содержит одно целое число x ( - 1018 ≤ x ≤ 1018) — угол поворота камеры в градусах. Положительное значение означает поворот камеры по часовой стрелке, отрицательное — против часовой.
Выведите одно целое число — минимальное необходимое количество поворотов на 90 градусов по часовой стрелке.
60
1
-60
3
Когда камера повёрнута на 60 градусов против часовой стрелки (второй пример), изображение с неё повёрнуто на 60 градусов по часовой стрелке. Один поворот изображения на 90 градусов по часовой стрелке даёт общий поворот в 150 градусов по часовой стрелке, и отклонение от «истинного верха» для одного поворота составляет 150 градусов. Два поворота изображения на 90 градусов по часовой стрелке дают общий поворот в 240 градусов по часовой стрелке, и отклонение от «истинного верха» для двух поворотов составляет 120 градусов, потому что 240 градусов по часовой стрелке — это то же самое, что 120 градусов против часовой стрелки. Три поворота изображения на 90 градусов дают общий поворот 330 градусов по часовой стрелке, и отклонение от «истинного верха» для трёх поворотов составляет 30 градусов, потому что 330 градусов по часовой стрелке — это то же самое, что 30 градусов против часовой стрелки.
Из отклонений 60, 150, 120 и 30 градусов минимальным является 30, оно достигается при трёх поворотах изображения на 90 градусов по часовой стрелке.
Название |
---|