
AND and OR operations
NA là 1 người thích học về các phép toán bit. Hiểu được tâm lí đó , thầy Vinh đã giao cho Na 1 bài tập rất thú vị như sau. Cho 1 mảng gồm n phần tử a0 , a1 , a2 , ... , an-1
. NA được thực hiện tùy số ( có thể không thực hiện) phép biến đổi như sau : Chọn 2 chỉ số i , j phân biệt trong mảng thỏa mãn (0 ≤ i,j ≤ n-1)
,
ta giả sử trước phép biến đổi thì x = ai , y = aj
,thì sau phép biến đổi ta gán ai = x AND y
và aj = x OR y
, với AND
và OR
là 2 phép toán bit. Sau khi hoàn thành xong, NA nhận thấy tổng bình phương của các phần tử thay đổi tùy vào số lần thực hiện. Nhiệm vụ của bạn là tìm tổng bình phương lớn nhất có thể đạt được sau khi thực hiện tùy ý số phép biến đổi như trên.
Ví dụ:
- Với
n = 3
vàa = [1,3,5]
thìAND_and_OR(n,a) = 51.
- Giải thích : Ta chọn phần tử 1 và 2 để thực hiện phép biến đổi , ta có
x = a[1] = 3 , y = a[2] = 5
thì lúc nàya[1] = x AND y =
1
vàa[2] = x OR y = 7.
Lúc này ta có mảnga = [1,1,7]
và đây là mảng có giá trị tổng bình phương mỗi phần tử lớn nhất: 12 + 12 + 72 = 51.
Đầu vào / Đầu ra:
- [Giới hạn thời gian]: 1s với C++,6s với JAVA & C#,8s với Python,Go,Js
- [Đầu vào]: Integer n
1 ≤ n ≤ 100000
- [Đầu vào]: Array of Integer a
0 ≤ a[i] ≤ 1048575
- [Đầu ra]: Long
Post Comment