ZOJ-3870-Team Formation

来源:互联网 发布:如网络中罕有受控源 编辑:程序博客网 时间:2024/05/19 06:35


点击打开题目链接


/*异或运算中 同0异1,要求得x = max(x1, x2),则应使得x1[pos] = 1&&x2[pos] = 0(pos为x1的最高位);*/#include <iostream>#include <cstring>#include <string>#include <algorithm>using namespace std;const int Max = 1e5 + 10;int a[Max];int bit[50];//最高位在当前位置的数的个数int f[Max];//对于数x的最高位的位置/*作用:寻找数x的最高位的位置pos,并累加bit[pos];*/void solve(int x,int i){int pos = 30;while(pos>=0){if(x&(1<<pos)){bit[pos] ++;f[i] = pos;return;}pos--;}}int main(){int T,n;cin>>T;while(T--){memset(bit,0,sizeof(bit));cin>>n;for(int i=0;i<n;i++){cin>>a[i];solve(a[i],i);}int sum = 0 ;for(int i=0; i<n; i++){int pos = f[i];while(pos>=0){if(!(a[i]&(1<<pos)))sum += bit[pos];pos--;}}cout<<sum<<endl;}    return 0;}


0 0
原创粉丝点击