1958 - Trừ đi phần giao

Tạo bởi: GV. Bùi Phú Khuyên

Mô tả yêu cầu

Trong một thế giới nơi mỗi số nguyên là một dạng năng lượng, bạn đang nắm giữ một dãy năng lượng gồm N phần tử. Mỗi phần tử mang một giá trị năng lượng nguyên dương.

Bạn có thể thực hiện một thao tác đặc biệt bao nhiêu lần tùy thích. Mỗi lần, bạn chọn hai phần tử khác nhau trong dãy (tức là chọn hai chỉ số i < j), rồi lấy phép AND bit của hai phần tử này và trừ nó đi khỏi một trong hai phần tử.

Cụ thể, nếu chọn A[i]A[j], thì bạn có thể tính A[i] & A[j] (phép AND bit) và sau đó trừ kết quả này khỏi A[i] hoặc A[j].

Mục tiêu của bạn là: biến càng nhiều phần tử về 0 càng tốt bằng các thao tác trên.

Hãy tính số lượng phần tử lớn nhất mà bạn có thể đưa về 0.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên N — số lượng phần tử trong dãy.
  • Dòng thứ hai chứa N số nguyên A₁, A₂, ..., Aₙ — giá trị năng lượng ban đầu của từng phần tử.

Dữ liệu ra

In ra một số nguyên: số lượng phần tử tối đa có thể biến thành 0 sau khi thực hiện các thao tác.

Giới hạn

  • 1 ≤ N ≤ 3 × 10⁵
  • 1 ≤ Aᵢ ≤ 3 × 10⁵

Ví dụ

Dữ liệu vào Sao chép
3
2 3 7
Dữ liệu ra Sao chép
2
Dữ liệu vào Sao chép
5
11 2 14 14 8
Dữ liệu ra Sao chép
3
Dữ liệu vào Sao chép
10
1 415 9 265 35 897 932 384 626 43
Dữ liệu ra Sao chép
8

Gợi ý/Hướng dẫn

Giải thích ví dụ 1:

  • Bước 1: Chọn (1, 2): 2 & 3 = 2, thực hiện 2 - 2 = 0 → A = [0, 3, 7]
  • Bước 2: Chọn (2, 3): 3 & 7 = 3, thực hiện 3 - 3 = 0 → A = [0, 0, 7]

Kết luận: 2 phần tử đã thành 0.

Đăng nhập để làm bài
Thông tin
Giới hạn thời gian 1 giây
Giới hạn bộ nhớ 128 MB


Bài tập trước1957
Bài tập sau