Hướng dẫn cho Giải thoát


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: letangphuquy

Có một nhận xét quan trọng trong bài này : Nhiệt độ có thể thay đổi một cách tùy thích theo modulo \(2\).

Giả sử robot đang ở ô \((x,y)\), và ô \((x,y+1)\) có thể đi tới được. Như thế thì, robot có thể di chuyển qua lại một số lần tùy ý giữa hai ô này rồi quay trở về ô \((x,y)\). Khi đó nhiệt độ trong máy sẽ giảm đi một lượng là bội dương của \(2\).

Xét tương tự với trường hợp robot ở ô \((x,y)\), và ô \((x+1,y)\) có thể đi tới được.

Như vậy, con robot có thể điều chỉnh nhiệt độ theo modulo \(2\) nếu trên đường đi của nó có bước di chuyển theo cả hướng ngang, lẫn hướng dọc. Khi đó chắc chắn tồn tại một ngã rẽ, gồm \(3\) ô vuông kề nhau (hình chữ L).

Ở đây chúng ta có thể sử dụng thuật toán tìm đường đi với các trạng thái như sau \((x,y,d,e)\) trong đó \((x,y)\) là tọa độ hiện tại của con robot, \(1 \leq d \leq 4\) thể hiện hướng mà con robot vừa đi để tới tọa độ hiện tại (trên,dưới,trái,phải), còn \(e = 0/1\) thể hiện rằng trên đường đi, robot này có rẽ hướng lần nào chưa?

Ta có thể kiểm tra luôn trường hợp từ \(f\) không đi tới được \(s\) bằng thuật toán trên.

Lấy đáp án : \(d = |x_f - x_s| + |y_f - y_s|\), nếu tồn tại một đường đi có ngã rẽ từ ô chứa \(s\) tới ô chứa \(f\) thì d %= 2.



Bình luận

Không có bình luận nào.