自定义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;
}