trang chủ / bài tập / sort3cyc

Sắp xếp bằng chu trình độ dài 3

Đề bài

Mô tả

Cho một mảng gồm n số nguyên a1,a2,,an với 1ain. Bạn muốn sắp xếp mảng theo thứ tự không giảm.

Bạn chỉ được phép dùng một loại thao tác duy nhất, gọi là chu trình độ dài 3 (3-cycle): chọn ba chỉ số phân biệt i,j,k (1i,j,kn) rồi đồng thời chuyển ai tới vị trí j, aj tới vị trí k, và ak tới vị trí i (các phần tử khác giữ nguyên).

Ví dụ với mảng [10,50,20,30,40,60], chọn i=2,j=1,k=5 thì mảng trở thành [50,40,20,30,10,60].

Bạn được dùng số thao tác tùy ý (có thể bằng 0). Hãy xác định xem có thể sắp xếp mảng a thành không giảm hay không.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t — số bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa số nguyên n — độ dài mảng.
    • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra "YES" nếu có thể sắp xếp mảng bằng các chu trình độ dài 3, ngược lại in ra "NO". Có thể in chữ hoa hoặc chữ thường tùy ý.

Ràng buộc

  • 1t5·105
  • 1n5·105
  • 1ain
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 5·105.

Ví dụ

Input Output Giải thích
7
1
1
2
2 2
2
2 1
3
1 2 3
3
2 1 3
3
3 1 2
4
2 1 4 3
YES
YES
NO
YES
NO
YES
YES
Với mảng [3,1,2], dùng chu trình 1321 là sắp xếp xong. Với [2,1,4,3], áp dụng 1321 rồi 2432. Mảng [2,1] độ dài 2 nên không thực hiện được thao tác nào, mà nó chưa sắp xếp nên đáp án là NO.
3
3
3 2 1
4
2 1 3 4
5
1 1 2 2 3
NO
NO
YES
[3,2,1] là một hoán vị lẻ nên không thể; [2,1,3,4] chỉ đổi chỗ hai phần tử (hoán vị lẻ) nên cũng không thể; mảng cuối có phần tử lặp lại nên luôn sắp xếp được.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0