Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [C] Tổng số bit 1 trong 32 ID liên tiếp — dùng __builtin_popcount

    Một dải gồm 323232 ID liên tiếp a,a+1,a+2,…,a+31a, a+1, a+2, \dots, a+31a,a+1,a+2,…,a+31. Phòng kỹ thuật cần biết tổng số bit 1 xuất hiện trong biểu diễn nhị phân của tất cả các ID này (cộng dồn popcount từng số).

    Có thể tận dụng hàm dựng sẵn của GCC __builtin_popcount(x) để đếm bit 1 trong một số unsigned int cực nhanh.

    Ví dụ: với a=0a = 0a=0, tổng popcount từ 000 đến 313131 là 808080.

    • Định dạng đầu vào:

      Một số nguyên không dấu aaa (0≤a≤4,294,967,2630 \le a \le 4{,}294{,}967{,}2630≤a≤4,294,967,263).

    • Ràng buộc đầu vào:

      Dùng unsigned int để thực hiện phép cộng theo modulo 2322^{32}232. Mỗi popcount nhỏ hơn 33 nên tổng nằm gọn trong int.

    • Định dạng đầu ra:

      Một số nguyên — tổng popcount(a) + popcount(a+1) + ... + popcount(a+31).

    Ví dụ:

    Đầu vào:

    0
    

    Đầu ra:

    80

    Giải thích:

    Tổng popcount của 0..31 = 80.

    Đang tải editor...