Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
119006 | 陈家宝 | 线性基 (basis) | C++ | 通过 | 100 | 13 MS | 1032 KB | 786 | 2024-01-03 13:18:37 |
#include<bits/stdc++.h> using namespace std; #define ll long long ll a[200005]; int sl[25],maxj=0,n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); int j; for(j=0;(a[i]>>j)>0;j++) sl[j]+=(a[i]>>j)&1; maxj=max(maxj, j); } // sort(a + 1, a + n + 1); // for(int i = 1; i <= n; i++){ //// int j = i + 1; //// if(j > n)break; // for(int j = 1; j <= n; j++){ // ll x, y; // x = a[i] & a[j], y = a[i] | a[j]; // a[i] = x, a[j] = y; // } // } // for(int i = 1; i <= n; i++) // printf("%lld ", a[i]); ll ans = 0; for(int i = 1; i <= n; i++){ a[i] = 0; for(int j = 0; j < maxj; j++){ if(sl[j]){ sl[j]--; a[i] |= (1 << j); } } ans += a[i] * a[i]; } printf("%lld\n", ans); return 0; }