给定序列 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an,每当两个元素 a a a和 b b b相撞后会湮灭并产生两个新元素 a & b a \& b a&b和 a ∣ b a | b a∣b。若干次碰撞后,方差会收敛。求收敛后的方差。
首先可以发现,任意两个元素相撞变化后,不会引起总和的变化,因此均值是不变的。
那么考虑求经过无限此碰撞后生成的新序列,容易发现因为或操作的性质,二进制下为 1 1 1的位不会消失,那么无限次或操作会将为 1 1 1的位向同一数字靠拢。于是直接按位统计后生成新序列计算即可。
如果使用公式
E
(
x
2
)
−
E
2
(
x
)
E(x^2) - E^2(x)
E(x2)−E2(x),需要继续推式子;但可以直接怼上方差公式,但是又会爆long long
,那么可以在运算过程中全部使用__int128
计算,最后转long long
输出。
#include
#pragma gcc optimize("O2")
#pragma g++ optimize("O2")
#define int __int128
#define endl '\n'
using namespace std;
const int N = 2e5 + 10, MOD = 1e9 + 7;
long long a[N], b[N], cnt[20];
inline void solve(){
long long n = 0, sum = 0; cin >> n;
for(int i = 1; i > a[i], sum += a[i];
int cnt0 = 0, cnt1 = 0;
for(int i = 1; i j) & 1) cnt[j]++;
}
}
for(int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?