“蔚来杯“2022牛客暑期多校训练营4 Particle Arts


题面:https://ac.nowcoder.com/acm/contest/33189/N
分析:
直接算会超long long,所以要减小计算量
可以发现(a&b)+(a|b)=a+b;
例如: 当a= 100 1 2 1001_2 10012,b= 110 1 2 1101_2 11012
a&b= 100 1 2 1001_2 10012 a|b= 110 1 2 1101_2 11012
所以(a&b)+(a|b)=a+b 也可说 1 2 1_2 12下沉了
故可以先把所有 1 2 1_2 12下沉,减小计算量(见代码)
接下来,考虑方差
因为 D ( x ) = E ( x 2 ) − E 2 ( x ) D(x)=E(x^2)-E^2(x) D(x)=E(x2)E2(x) E ( x ) = 1 n ∑ i = 1 n x E(x)=\frac{1}{n}\sum^n_{i=1}x E(x)=n1i=1nx
即求平均数
代码:

#include<bits/stdc++.h>
#define LL long long
 
 
using namespace std;
 
const int MXN=1e5+7;
 
int a[MXN];
int b[47],c[MXN];
 
long long gcd(long long x,long long y){
	if(x%y==0) return y;
	return gcd(y,x%y);
}
int main(){
	ios::sync_with_stdio(false);
	int n,t,maxlen,id,i,nn;
	cin>>n;
	for(i=1;i<=n;i++){
		cin>>a[i];
		t=0;
		while(a[i]){
			t++;
			b[t]+=(a[i]&1);
			maxlen=max(maxlen,t);
			a[i]>>=1;
		}
	}
	for(i=1;i<=maxlen;i++){
		id=1;
		while(b[i]){
			c[id]|=(1<<(i-1));
			id++;
			nn=max(nn,id);
			b[i]--; 
		}
	}
	long long k1=0,k2=0;
	for(i=1;i<=nn;i++){
		k1=k1+c[i]*c[i]; k2=k2+c[i];
	}
	long long res=k1*1ll*n-k2*k2;
	cout<<res/gcd(res,1ll*n*n)<<"/"<<1ll*n*1ll*n/gcd(res,1ll*n*n)<<"\n";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值