Link bài: Thuật toán: Khởi chạy mảng 2 chiều chứa hình xoắn ốc của bài, lấy tọa độ a (i) (j) với i = 101 và j = 101 làm gốc tọa độ. Dùng chương trình con để chạy từng cạnh một của hình xoắn ốc, ta sẽ khởi tạo từ trong ra ngoài. Đối với 1 cạnh, hướng đi của ta sẽ thẳng tiến với 1 trục giữ nguyên, tức từ ô a (i) (j) sẽ đi đến một trong các ô a (i) (j+1), a (i) (j-1), a (i+1) (j), a (i-1) (j). Ta cần thiết lập một hướng đi. Khi kết thúc cạnh, ta cần đổi hướng đi. Ta nhận biết được khi kết thúc cạnh, thì ô bên trái theo chiều hướng đi sẽ bằng 0. Code: Mã: #include<bits/stdc++.h> using namespace std; int x, y, valuefor_position; int axis[207][207]; void runfor(int position_x, int position_y, int direction_x, int direction_y){ if (position_x == 0 || position_y == 0) return; int a = position_x, b = position_y; while (axis[a-direction_y][b+direction_x] != 0){ axis[a] = valuefor_position+1; a += direction_x; b += direction_y; valuefor_position++; } runfor(a, b, -direction_y, direction_x); } void read(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("VOXO.INP", "r", stdin); //freopen("VOXO.OUT", "w", stdout); cin >> x >> y; } void run(){ axis[101][101] = 1; valuefor_position = 1; runfor(102, 101, 0, 1); cout << axis[x+101][y+101]; } int main(){ read(); run(); return 0; }