Hướng dẫn giải của Đếm bit

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Tác giả: DangHung845

Gợi ý: Để đếm số bit ~1~ khi quy đổi sang hệ nhị phân của môt số, ta sẽ dùng một số cách như sau:

  • Quy đổi số sang hệ nhị phân, với mỗi lần chia dư cho ~2~ bằng ~1~ ta sẽ có thêm ~1~ bit ~1~.
  • Dùng hàm __builting_popcount() có sẵn trong C++.

Code tham khảo

#include <bits/stdc++.h>

using namespace std;

const int maxN = 1e6+2;
int n,maxk;
int a[maxN];

void Input(void) {
    cin >> n;
    for (int i=0;i<n;i++) cin >> a[i];
}

int Count_bit_1(int k) {
    int cnt = 0;
    while (k > 0) {
        cnt += (k & 1);
        k >>= 1;
    }
    return cnt;
}

void Process(void) {
    maxk = 0;
    for (int i=1;i<n;i++) {
        if (Count_bit_1(a[maxk]) <= Count_bit_1(a[i])) {
            if (Count_bit_1(a[maxk]) == Count_bit_1(a[i])) {
                if (a[maxk] < a[i]) maxk = i;
            }
            else maxk = i;
        }
    }
}

void Output(void) {
    cout << a[maxk];
}

int main(void) { 
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    Input();
    Process();
    Output();
    return 0;
}

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.