#include <iostream>
using namespace std;
template<size_t N, typename T>
size_t bitcount(T v, enable_if_t<(N <= 1)>* = 0)
{
static const unsigned char BitsSetTable256[256] =
{
# define B2(n) n, n+1, n+1, n+2
# define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2)
# define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2)
B6(0), B6(1), B6(1), B6(2)
};
return BitsSetTable256[v & 0xff];
}
template<size_t N, typename T>
size_t bitcount(T v, enable_if_t<(N > 1)>* = 0)
{
return bitcount<1>(v) + bitcount<N - 1>(v >> 8);
}
int main() {
// your code goes here
cout << bitcount<4>(0x01234567) << endl;
cout << bitcount<8>(0x0123456789abcdefULL) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8c2l6ZV90IE4sIHR5cGVuYW1lIFQ+CnNpemVfdCBiaXRjb3VudChUIHYsIGVuYWJsZV9pZl90PChOIDw9IDEpPiogPSAwKQp7CglzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBCaXRzU2V0VGFibGUyNTZbMjU2XSA9IAoJewojCQlkZWZpbmUgQjIobikgbiwgICAgIG4rMSwgICAgIG4rMSwgICAgIG4rMgojCQlkZWZpbmUgQjQobikgQjIobiksIEIyKG4rMSksIEIyKG4rMSksIEIyKG4rMikKIwkJZGVmaW5lIEI2KG4pIEI0KG4pLCBCNChuKzEpLCBCNChuKzEpLCBCNChuKzIpCgkJQjYoMCksIEI2KDEpLCBCNigxKSwgQjYoMikKCX07CglyZXR1cm4gQml0c1NldFRhYmxlMjU2W3YgJiAweGZmXTsKfQoKdGVtcGxhdGU8c2l6ZV90IE4sIHR5cGVuYW1lIFQ+CnNpemVfdCBiaXRjb3VudChUIHYsIGVuYWJsZV9pZl90PChOID4gMSk+KiA9IDApCnsKCXJldHVybiBiaXRjb3VudDwxPih2KSArIGJpdGNvdW50PE4gLSAxPih2ID4+IDgpOwp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWNvdXQgPDwgYml0Y291bnQ8ND4oMHgwMTIzNDU2NykgPDwgZW5kbDsKCWNvdXQgPDwgYml0Y291bnQ8OD4oMHgwMTIzNDU2Nzg5YWJjZGVmVUxMKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=