博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3811 玛里苟斯(线性基+概率期望)
阅读量:5262 次
发布时间:2019-06-14

本文共 1106 字,大约阅读时间需要 3 分钟。

  k=1的话非常好做,每个有1的位都有一半可能性提供贡献。由组合数的一些性质非常容易证明。

  k=2的话,平方的式子展开可以发现要计算的是每一对位提供的贡献,于是需要计算每一对位被同时选中的概率。找出所有存在的相互绑定的位,这些位被同时选择的概率为0.5,而不被绑定的则为0.25。

  对于k>=3,其实用与k=1,2相同的方法大力讨论也可以做。考虑更优美的做法。有一个性质:集合内数相互异或不影响答案。证明比(bing)较(bu)显(hui)然(xie)。于是构造出线性基。可以发现线性基里的元素很少,暴搜一发即可。

  卡精度,不会证地有答案一定是整数或.5,全程整数各种乱搞即可。

#include
#include
#include
#include
#include
#include
using namespace std;#define N 100010#define ll unsigned long longll read(){ ll x=0,f=1;char c=getchar(); while (c<'0'||c>'9') { if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f;}int n,m,cnt=0;ll a[N],base[64],b[64];bool flag[64],f[64][64];ll ans,tot;void getbase(){ for (int i=1;i<=n;i++) { ll x=a[i]; for (int j=63;~j;j--) if (x&(1ll<
0)^((a[i]&(1ll<
0)) f[j][k]=f[k][j]=0; for (int i=0;i<34;i++) if (flag[i]) for (int j=0;j<34;j++) if (flag[j]) { if (!f[i][j]) ans+=(1ll<
cnt) { ll t=s*s*s;t/=(1<
=3) { getbase(),solve3(1,0); cout<

 

转载于:https://www.cnblogs.com/Gloid/p/9741470.html

你可能感兴趣的文章
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
Struts2 拦截器
查看>>
Oracle HRMS API's
查看>>
PostgreSQL中如何查看一个表所对应的文件
查看>>
mysql_real_escape_string() vs addslashes() vs addcslashes()
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
基于visual Studio2013解决C语言竞赛题之1060寻找回文数
查看>>
采用用同步编程的方式实现跨进程异步获取数据
查看>>
几道字典树题目
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
Stripe
查看>>
一张图看懂UML类图
查看>>
C程序设计语言(K&R) 笔记2
查看>>
ROS 发布和订阅自定义消息数组
查看>>
python创建进程的两种方式
查看>>
firewall-cmd 使用总结
查看>>
C# IDisposable接口的使用
查看>>