按数据中1的位数排序

63 阅读1分钟

image.png

image.png

自定义cmp

bool cmp(const elem &a, const elem &b) {
    if (a.bit.count() == b.bit.count()) {
        return (a.value < b.value);
    }
    return (a.bit.count() > b.bit.count());
}

bitset使用

bitset<64> tmp(x);//将x转化为bit形式 存入tmp

输出的小妙招

    for (int i = 0; i < num; i++) {
        cout << data[i].value << ((i + 1 == num) ? "\n" : " ");
    }
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
struct elem {
    long long value;
    bitset<64> bit;
};
bool cmp(const elem &a, const elem &b) {
    if (a.bit.count() == b.bit.count()) {
        return (a.value < b.value);
    }
    return (a.bit.count() > b.bit.count());
}
void solve()
{
    int num; 
	cin >> num; 
    elem *data = new elem[num];
    for (int i = 0; i < num; i++) {
        cin >> data[i].value; 
        bitset<64> tmp(data[i].value);
        data[i].bit = tmp;
    }
    sort(data, data + num, cmp);
    for (int i = 0; i < num; i++) {
        cout << data[i].value << ((i + 1 == num) ? "\n" : " ");
    }
}
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cout<<"case #"<<i<<":"<<endl;
		solve();
	}
	return 0;
}