Trị tuyệt đối lớn nhất

Xem dạng PDF

Gửi bài giải

Điểm: 2,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Người đăng:
Dạng bài

Bạn được cho một mảng ~a~ có độ dài ~n~. Bạn có thể thực hiện thao tác sau nhiều lần (có thể không):

  • Chọn ~i, j, b~: Hoán đổi bit thứ ~b~ trong dãy nhị phân của ~a_i~ và ~a_j~

Tìm giá trị lớn nhất của ~max(a) - min(a)~ với ~max(a)~ là phần tử lớn nhất của dãy ~a~ và ~min(a)~ là phần tử bé nhất của dãy ~a~.

Trong biểu diễn nhị phân, các bit được đánh số từ phải sang trái. Coi như có vô số bit ~0~ đứng đầu của bất kỳ biểu diễn nhị phân nào.

Ví dụ, hoán đổi bit thứ ~0~ của ~4 = 100_2~ và ~3 = 11_2~ sẽ có kết quả ~101_2 = 5~ và ~10_2 = 2~. Hoán đổi bit thứ ~2~ của ~4 = 100_2~ và ~3 = 11_2~ sẽ có kết quả ~000_2 = 0~ và ~111_2 = 7~.

Dữ liệu vào:

  • Dòng thứ nhất chứa một số nguyên ~t\ (1\leq t\leq 128)~: số testcases.
  • Dòng đầu tiên của mỗi test chứa một số nguyên ~n\ (3\leq n\leq 512)~: độ dài dãy ~a~.
  • Dòng thứ hai của mỗi test chứa ~n~ số nguyên ~a_1, a_2,\dots, a_n\ (0\leq a_i\leq 1024)~: các phần tử dãy ~a~.

Dữ liệu đảm bảo tổng ~n~ tất cả testcases không vượt quá ~512~.

Dữ liệu ra:

  • In ra mỗi dòng ứng với ~max(a) - min(a)~ lớn nhất của mỗi test.

Input:

4
3
1 0 1
4
5 5 5 5
5
1 2 3 4 5
7
20 85 100 41 76 49 36

Output:

1
0
7
125

Giải thích:

  • Ở ví dụ đầu tiên, có thể chứng minh rằng ta không cần thực hiện bất kỳ thao tác nào, ~max(a) - min(a)~ lớn nhất là ~1 - 0 = 1~.
  • Ở ví dụ thứ hai, không có thao tác nào có thể thay đổi mảng, ~max(a) - min(a)~ lớn nhất là ~5 - 5 = 0~.
  • Ở ví dụ thứ ba, mảng ban đầu ~a = [1,2,3,4,5]~, chúng ta có thể thực hiện một thao tác ~i = 2, j = 5, b = 1~. Mảng bây giờ trở thành ~a = [1, 0, 3, 4, 7]~. Có thể chứng minh rằng bất kỳ thao tác tiếp theo cũng không dẫn đến kết quả tốt hơn, do đó đáp án là ~max(a) - min(a) = 7 - 0 = 7~.

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.