#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 10;
ll n;
ll g[N],st[100];
ll sum;
int main()
{
cin>>n;
ll x;
for(int i=0;i<n;i++)
{
cin>>x;
sum+=x;
for(int j=0;j<20;j++)
{
if(x>>j&1) st[j]++;//表示所有数的二进制第j位的1的个数
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<20;j++)
{
if(st[j]) g[i]+=1<<j,st[j]--;// 1<<j 表示取(8 4 2 1) 中第j个数
}
}
ll ans=0;
for(int i=0;i<n;i++)
{
ans+=(g[i]*g[i]);
}
ll res=(ans*n)-(sum*sum);
ll cnt=n*n;
ll gcd=__gcd(res,cnt);
cout<<res/gcd<<"/"<<cnt/gcd<<'\n';
return 0;
}
/*
例子
1 0 1 1 1 1 7
1 0 0 1 1 1 7
0 1 1 0 0 1 1
0 1 0 0 0 0 0
0 0 1 0 0 0 0
( 把1群聚,等价于无限 ^ | 下去 )
*/
【无标题】
最新推荐文章于 2024-07-11 22:03:57 发布