Xoay ảnh

Đề bài

Mô tả

Một chiếc máy ảnh được gắn cơ cấu quay quanh trục quang của nó trong lúc chụp. Khi máy ảnh quay x độ theo chiều kim đồng hồ thì nội dung trong bức ảnh thu được lại bị xoay đúng x độ ngược chiều kim đồng hồ.

Thuật toán nhận diện khuôn mặt chỉ hoạt động tốt khi khuôn mặt lệch rất ít so với phương thẳng đứng, nên ta cần xoay lại bức ảnh. Phần cứng chỉ hỗ trợ một thao tác duy nhất: xoay bức ảnh 90 độ theo chiều kim đồng hồ. Thao tác này có thể lặp lại nhiều lần tuỳ ý.

Sau k thao tác, nội dung bức ảnh đã bị xoay tổng cộng x+90k độ theo chiều kim đồng hồ (giá trị âm nghĩa là xoay ngược chiều kim đồng hồ). Độ lệch của bức ảnh là góc nhỏ nhất giữa hướng "lên trên thật" trong ảnh và phương thẳng đứng, tức là giá trị thuộc đoạn [0,180] thu được khi rút gọn tổng góc xoay theo modulo 360 rồi lấy khoảng cách gần nhất tới 0 độ.

Cho góc quay x của máy ảnh, hãy tìm số thao tác ít nhất sao cho độ lệch của bức ảnh là nhỏ nhất có thể. Nếu có nhiều số thao tác cùng cho độ lệch nhỏ nhất, hãy chọn số thao tác nhỏ hơn.

Dữ liệu vào

Một dòng duy nhất chứa số nguyên x là góc quay của máy ảnh tính bằng độ. Giá trị dương nghĩa là máy ảnh quay theo chiều kim đồng hồ, giá trị âm nghĩa là quay ngược chiều kim đồng hồ.

Dữ liệu ra

Một số nguyên duy nhất là số thao tác xoay 90 độ theo chiều kim đồng hồ ít nhất cần thực hiện.

Ràng buộc

  • 1018x1018

Ví dụ

Input Output Giải thích
60 1 Nội dung ảnh bị xoay 60 độ ngược chiều kim đồng hồ. Với k=0,1,2,3 độ lệch lần lượt là 60,30,120,150. Nhỏ nhất là 30, đạt được khi k=1.
-60 3 Nội dung ảnh bị xoay 60 độ theo chiều kim đồng hồ. Với k=0,1,2,3 tổng góc xoay là 60,150,240,330 độ, tương ứng độ lệch 60,150,120,30. Nhỏ nhất là 30, đạt được khi k=3.
45 0 Với k=0 tổng góc xoay là 315 độ (lệch 45), với k=1 tổng góc xoay là 45 độ (cũng lệch 45). Hai giá trị cùng cho độ lệch nhỏ nhất nên chọn số thao tác nhỏ hơn là 0.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0