trang chủ / đề bài / oddprefrev

Đảo tiền tố lẻ

Đề bài

Mô tả

Cho một hoán vị a=[a1,a2,…,an] gồm n số nguyên phân biệt từ 1 đến n, với n là số lẻ. Nhiệm vụ của bạn là sắp xếp hoán vị này theo thứ tự tăng dần.

Mỗi bước, bạn được chọn một tiền tố có độ dài lẻ và đảo ngược nó. Cụ thể, bạn chọn một số nguyên lẻ p với 1≤p≤n, khi đó mảng a trở thành

[ap,ap−1,…,a1,ap+1,ap+2,…,an].

Hãy tìm một cách sắp xếp a bằng không quá ⌊5n/2⌋ phép đảo như trên, hoặc chỉ ra rằng không tồn tại cách nào. Số phép đảo không cần nhỏ nhất.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t (1≤t≤100) là số bộ dữ liệu.
  • Mỗi bộ dữ liệu gồm hai dòng:
    • Dòng thứ nhất chứa số nguyên lẻ n (3≤n≤2021) là độ dài hoán vị.
    • Dòng thứ hai chứa n số nguyên phân biệt a1,a2,…,an (1≤ai≤n).

Tổng của n trên tất cả các bộ dữ liệu không vượt quá 2021.

Dữ liệu ra

Với mỗi bộ dữ liệu:

  • Nếu không thể sắp xếp a bằng không quá ⌊5n/2⌋ phép đảo, in ra một số −1.
  • Ngược lại, in ra số nguyên m (0≤m≤⌊5n/2⌋) là số phép đảo, rồi in ra m số nguyên p1,p2,…,pm (1≤pi≤n, pi lẻ) là độ dài các tiền tố được đảo, theo đúng thứ tự thực hiện.

Nếu có nhiều đáp án, in ra đáp án bất kỳ.

Ràng buộc

  • 1≤t≤100
  • 3≤n≤2021, n lẻ
  • 1≤ai≤n, các ai đôi một phân biệt
  • Tổng n trên mọi bộ dữ liệu không vượt quá 2021

Ví dụ

Input Output Giải thích
3
3
1 2 3
5
3 4 5 2 1
3
2 1 3
5
3 1 3 3 3
10
3 1 3 3 5 3 1 3 3 3
-1
Bộ 1: hoán vị đã được sắp xếp, nhưng đáp án in ra vẫn hợp lệ vì sau 5 phép đảo mảng trở lại trạng thái tăng dần; in ra 0 cũng được chấp nhận. Bộ 2: một đáp án ngắn hơn là 2 phép đảo với độ dài 3 rồi 5, biến [3,4,5,2,1] thành [5,4,3,2,1] rồi thành [1,2,3,4,5]. Bộ 3: giá trị 2 đứng ở vị trí 1, không có cách nào sắp xếp nên in −1.
2
5
1 4 3 2 5
7
7 6 5 4 3 2 1
10
5 3 5 3 5 1 1 3 3 3
15
1 1 3 3 7 5 1 3 3 5 3 1 3 3 3
Cả hai bộ đều sắp xếp được. Với n=5 giới hạn là 12 phép đảo, với n=7 giới hạn là 17 phép đảo, nên cả hai đáp án đều nằm trong giới hạn.

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.402 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.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0