当前位置:网站首页>(2022牛客多校四)N-Particle Arts(思维)
(2022牛客多校四)N-Particle Arts(思维)
2022-08-08 23:06:00 【AC__dream】
题目:
样例输入:
5
1 2 3 4 5
样例输出:
54/5
题意:
n个粒子,每个粒子有一个能量ai。两两随机碰撞,假如两个例子的能量分别为a和b,那么碰撞一次两粒子的能量分别变为a&b,a|b。求所有粒子能量稳定后的方差。
我们分析两个粒子碰撞后的结果可以发现,对于a和b的二进制位,假如第i位两者都是1,那么碰撞后形成的两个粒子能量的第i位都是1,如果第i位两者都是0,那么碰撞后形成的两个粒子能量的第i位都是0,如果碰撞前a粒子和b粒子能量第i位一个是1一个是0,那么碰撞后形成的粒子第i位也是一个1一个0,但是1是在或运算后的那个粒子上,那么容易发现,每次碰撞都会使得一个粒子的能量变大(也可能不变),而且碰撞后二进制位上1的个数不变,只是有可能从1个粒子转移到另一个粒子上,由于碰撞了无数次,那么肯定使得二进制上的1尽可能地集中在了少数上,最后的稳定态也就是对于任意的i和j,都有(ai|aj,ai&aj)=(ai,aj)或者 (ai|aj,ai&aj)=(aj,ai) 。 所以我们只需要统计一开始给定的n个数中每一位上1出现的次数即可,最后对n个数进行分配,每次都尽可能把1分配在一个数上,最后求一下期望即可。
需要注意的一点就是由于数比较大,所以可能会爆long long,所以建议直接用__int128计算。
下面是代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=1e5+10;
int cnt[200];
long long a[N],b[N];
int main()
{
long long n;
cin>>n;
for(int i=1;i<=n;i++)
{
int t;
scanf("%lld",&a[i]);
for(int j=0;j<15;j++)
cnt[j]+=(a[i]>>j&1);
}
__int128 ans=0,ans1=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<15;j++)
if(cnt[j])
{
b[i]|=(1<<j);
cnt[j]--;
}
ans+=b[i];
ans1+=b[i]*b[i];
}
__int128 anss=ans1*n+ans*ans-2*ans*ans;
__int128 t=__gcd(anss,(__int128)n*n);
long long up = anss/t;
long long down = n*n/t;
printf("%lld/%lld",up,down);
return 0;
}
边栏推荐
- 生活中无处不在的MPLS虚拟专用网
- JS中数组扁平化的几种方法
- 关于OD的bp send断点 常用断点(OD)
- 考证必看 | PMP扫盲贴+PMP材料
- Button Wizard for ts API usage
- 树莓派wiringPi库的使用补充
- Kubernetes与OpenStack
- Introduction to Qt (5) - file operation, hotkey and mouse reading (implementation of txt window)
- Ant Forest Offline crawlers automatically collect energy, raise chickens, and other operations
- Share | design based on MCU P0 mouth to drive the LED flashing
猜你喜欢
(2022牛客多校五)B-Watches(二分)
[Bug solution] ValueError: Object arrays cannot be loaded when allow_pickle=False
sess.restore() 和 tf.import_meta_graph() 在使用时的一些关联
iptables firewall content full solution
(2022杭电多校六)1012-Loop(单调栈+思维)
Qt入门(五)——文件操作、热键和鼠标的读取(txt窗口的实现)
ABP中的数据过滤器
微信小程序错误 undefined Expecting ‘STRING‘,‘NUMBER‘,‘NULL‘,‘TRUE‘,‘FALSE‘,‘{‘,‘[‘, got ]解决方案
Kubernetes 资源编排系列之二: Helm 篇
机器学习建模高级用法!构建企业级AI建模流水线
随机推荐
【Verilog基础】关于芯片中信号串扰的理解
【Tensorflow2】tensorflow1.x-tensorflow2.x一些接口的转变
从stm32移植ucos2的代码到GD32
bp神经网络的学习心得
Introduction to Qt (5) - file operation, hotkey and mouse reading (implementation of txt window)
ndk和JNI的使用初探
(2022杭电多校六)1012-Loop(单调栈+思维)
The second side of Tencent technical support internship - Tencent's father's luck is so sudden (offer received)
【Verilog基础】PPA优化问题总结(含面积优化、速度优化)
makefile 自动编译 目录和子目录的 C文件
三国战绩物品序号.txt
虚拟路由冗余协议VRRP——双机热备份基础
sess.restore() 和 tf.import_meta_graph() 在使用时的一些关联
Excuse me: is it safe to pay treasure to buy fund on
ArcPy set the unique identification code
C语言 库函数汇总2019.10.31
人人熟知的IPV6竟然还有这么多细节
-Wl,--start-group ... -Wl,--end-group 用于解决几个库的循环依赖关系
如何使用 Eolink 实现 API 文档自动生成
stm32 利用 串口接收空闲中断 + dma 实现不定长度dma 接收