Gộp các phần tử bằng nhau

Đề bài

Mô tả

Cho một mảng gồm n số nguyên dương. Chừng nào trong mảng còn tồn tại ít nhất hai phần tử bằng nhau, ta thực hiện thao tác sau:

  • Chọn giá trị x nhỏ nhất xuất hiện từ hai lần trở lên trong mảng.
  • Lấy hai vị trí xuất hiện đầu tiên (hai vị trí trái nhất) của x. Xóa phần tử bên trái trong hai phần tử này, còn phần tử bên phải được thay bằng tổng của hai giá trị, tức là 2·x.

Sau khi xóa một phần tử, các phần tử còn lại giữ nguyên thứ tự tương đối của chúng (mảng "co lại").

Hãy xác định mảng sẽ trông như thế nào sau khi thực hiện tất cả các thao tác trên.

Dữ liệu vào

  • Dòng đầu tiên chứa một số nguyên n — số phần tử của mảng.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an — các phần tử của mảng.

Dữ liệu ra

  • Dòng đầu in ra số nguyên k — số phần tử của mảng sau khi thực hiện xong các thao tác.
  • Dòng thứ hai in ra k số nguyên — các phần tử của mảng sau khi thực hiện xong các thao tác, theo đúng thứ tự.

Ràng buộc

  • 2n150000
  • 1ai109

Ví dụ

Input Output Giải thích
7
3 4 1 2 2 1 1
4
3 8 2 1
[3,4,1,2,2,1,1][3,4,2,2,2,1][3,4,4,2,1][3,8,2,1]. Giá trị 1 nhỏ nhất được gộp trước, sau đó đến 2, rồi 4.
5
1 1 3 1 1
2
3 4
[1,1,3,1,1][2,3,1,1][2,3,2][3,4].
5
10 40 20 50 30
5
10 40 20 50 30
Mọi phần tử đôi một khác nhau nên mảng không thay đổi.

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 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