Cho một hoán vị a độ dài n. Nếu quân đang ở vị trí i, người chơi có thể chuyển tới j khi:
∣i−j∣ là bội dương của ai;
aj>ai.
Ai không có nước đi thua. Với mỗi vị trí xuất phát, hãy cho biết người đi trước thắng (A) hay thua (B).
Input
Dòng đầu chứa n; dòng sau chứa một hoán vị của 1,…,n.
Output
In chuỗi n ký tự A/B; ký tự thứ i cho biết trạng thái xuất phát ở vị trí i.
Constraints
1≤n≤5000.
Dãy là một hoán vị của 1,…,n.
Scoring
Subtask 1 (50% số điểm): các test 1-10 có kích thước nhỏ, thuận tiện kiểm chứng độc lập.
Subtask 2 (50% số điểm): không có giới hạn bổ sung ngoài các cận đã nêu.
Example
Test 1
Input
1
1
Output
B
Giải thích: Hoán vị chỉ có phần tử 1, nên không có vị trí đích nào mang giá trị lớn hơn để thực hiện nước đi. Vị trí duy nhất là trạng thái thua và ký tự cần in là B.
Lời giải tóm tắt
Ý tưởng và thuật toán: Lưu pos[value]. Xử lý value từ n giảm xuống 1; khi xét vị trí i=pos[value], mọi đích hợp lệ có giá trị lớn hơn đã được phân loại.
Ý tưởng và thuật toán: Duyệt các vị trí i+value, i+2*value, ... và i-value, i-2*value, .... Chỉ đích có a[j]>value là hợp lệ.
Ý tưởng và thuật toán: Nếu tồn tại một đích đang thua, vị trí i là thắng.
Ý tưởng và thuật toán: Nếu mọi đích hợp lệ đều thắng hoặc không có đích, i là thua.
Ý tưởng và thuật toán: In A cho trạng thái thắng, B cho trạng thái thua.
Chứng minh đúng đắn: Vì mỗi nước đi làm giá trị tại vị trí tăng nghiêm ngặt, đồ thị trạng thái không có chu trình; thứ tự giá trị giảm dần là thứ tự topo ngược.
Chứng minh đúng đắn: Chứng minh quy nạp theo giá trị giảm. Trạng thái chứa giá trị lớn nhất không có đích lớn hơn nên thua, đúng với code. Giả sử mọi trạng thái giá trị lớn hơn x đã đúng. Từ vị trí có giá trị x, người hiện tại thắng đúng khi có thể chuyển sang một trạng thái mà đối thủ thua; nếu không, mọi nước đều giao trạng thái thắng cho đối thủ và người hiện tại thua. Code xét đúng toàn bộ các vị trí có khoảng cách là bội x và lọc đúng điều kiện lớn hơn, nên phân loại chính xác.
Độ phức tạp: Tổng số vị trí được duyệt là O(n log n) trên một hoán vị; bộ nhớ O(n).