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

Sắp xếp may mắn

Đề bài

Mô tả

Một số nguyên dương được gọi là số may mắn nếu biểu diễn thập phân của nó chỉ gồm các chữ số 47. Ví dụ 47, 744, 4 là số may mắn, còn 5, 17, 467 thì không.

Cho dãy a1,a2,,an gồm n số nguyên dương. Bạn muốn sắp xếp dãy này theo thứ tự không giảm, nhưng chỉ được phép dùng một loại thao tác:

Chọn hai vị trí phân biệt ij rồi hoán đổi ai với aj, với điều kiện ít nhất một trong hai giá trị ai, aj tại thời điểm hoán đổi là số may mắn.

Hãy tìm một dãy thao tác bất kỳ gồm không quá 2n lần hoán đổi để dãy trở thành không giảm, hoặc cho biết điều đó là không thể.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n — số phần tử của dãy.
  • Dòng thứ hai chứa n số nguyên dương a1,a2,,an.

Dữ liệu ra

Nếu không thể sắp xếp dãy, in ra một số duy nhất 1.

Ngược lại, dòng đầu in số nguyên k (0k2n) là số lần hoán đổi. Trên k dòng tiếp theo, mỗi dòng in hai số nguyên phân biệt là chỉ số của hai phần tử cần hoán đổi (các phần tử được đánh số từ 1).

Không cần cực tiểu hoá k. Nếu có nhiều đáp án, in ra đáp án bất kỳ.

Ràng buộc

  • 1n105
  • 1ai109

Ví dụ

Input Output Giải thích
3
4 2 1
1
1 3
Hoán đổi a1=4 (số may mắn) với a3=1, dãy trở thành 1 2 4.
2
4 7
0 Dãy đã không giảm sẵn nên không cần thao tác nào.
2
2 1
-1 Dãy chưa được sắp xếp mà không có phần tử nào là số may mắn, nên mọi thao tác đều bị cấm.
7
77 66 55 44 33 22 11
7
1 7
7 2
2 6
6 7
7 3
3 5
5 7
Số may mắn 77 được dùng làm "ô trống": mọi lần hoán đổi đều có một đầu đang giữ giá trị 77 nên đều hợp lệ. Dãy cuối cùng là 11 22 33 44 55 66 77, dùng 7 lần hoán đổi (không quá 2n=14).

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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0