[清华集训2015 Day1]玛里苟斯-[线性基]
Description

Solution
考虑k=1的情况。假设所有数中,第i位为1的数的个数为x,则最后所有的子集异或结果中,第i位为1的个数为$(C_{k}^{1}+C_{k}^{3}+...)$*2原本的数中第i位为0的数的个数。同理,所有子集异或结果中第i位为0的个数为$(C_{k}^{0}+C_{k}^{2}+...)$*2原本的数中第i位为0的数的个数。
由于二项式定理,可得前后两个式子大小相等。即对于每一位i,如果该位有某个(些)数为1,ans+=10i-1/2。
k=2同理。
对于k>2,我们发现假如某个数能够由其他若干个数异或而得,那么把这个数删掉对答案没有影响。可以用线性基。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=1e5+;
typedef unsigned long long ull;
int n,k,R;ull a[N];
ull b[];int cnt;
ull _ans,_res;
void dfs(int x,ull c)
{
if (x==cnt+)
{
ull num=,yu=;
for (int i=;i<=k;i++)
{
num*=c;yu*=c;
num+=yu>>cnt;yu&=R;
}
_res+=yu;
_ans+=num+(_res>>cnt);
_res&=R;
return;
}
dfs(x+,c);
dfs(x+,c^b[x]);
}
int main()
{
scanf("%d%d",&n,&k);
for (int i=;i<=n;i++) scanf("%llu",&a[i]);
if (k==)
{
ull t=;
for (int i=;i<=n;i++) t|=a[i];
printf("%llu%s",t>>,t&?".5":);return ;
}
if (k==)
{
ull t=,ans=;
for (int i=;i<=n;i++) t|=a[i];
for (int i=;i<;i++) for (int j=i;j<;j++)
if (t>>i&&t>>j) ans+=1ull<<(i+j);
printf("%llu%s",ans>>,ans&?".5":);return ;
}
ull t[];
memset(t,,sizeof(t));
for (int i=;i<=n;i++)
for (int j=;j>=;j--)
{
if (a[i]&(<<j)) if (!t[j]) {t[j]=a[i];break;}
a[i]^=t[j];
}
for (int i=;i<=;i++) if (t[i]) b[++cnt]=t[i];
R=(<<cnt)-;
dfs(,);
if (_res) printf("%llu.5",_ans);else printf("%llu",_ans);
}
[清华集训2015 Day1]玛里苟斯-[线性基]的更多相关文章
- UOJ#36. 【清华集训2014】玛里苟斯 线性基
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ36.html 题解 按照 $k$ 分类讨论: k=1 : 我们考虑每一位的贡献.若有至少一个数第 $i$ ...
- [清华集训2015 Day1]主旋律-[状压dp+容斥]
Description Solution f[i]表示状态i所代表的点构成的强连通图方案数. g[i]表示状态i所代表的的点形成奇数个强连通图的方案数-偶数个强连通图的方案数. g是用来容斥的. 先用 ...
- 清华集训2015 V
#164. [清华集训2015]V http://uoj.ac/problem/164 统计 描述 提交 自定义测试 Picks博士观察完金星凌日后,设计了一个复杂的电阻器.为了简化题目,题目中的常数 ...
- 「清华集训2015」V
「清华集训2015」V 题目大意: 你有一个序列,你需要支持区间加一个数并对 \(0\) 取 \(\max\),区间赋值,查询单点的值以及单点历史最大值. 解题思路: 观察发现,每一种修改操作都可以用 ...
- uoj#36. 【清华集训2014】玛里苟斯(线性基+概率期望)
传送门 为啥在我看来完全不知道为什么的在大佬们看来全都是显然-- 考虑\(k=1\)的情况,如果序列中有某一个\(a_j\)的第\(i\)位为\(1\),那么\(x\)的第\(i\)位为\(1\)的概 ...
- UOJ #36 -【清华集训2014】玛里苟斯(线性基+暴搜)
UOJ 题面传送门 看到 \(k\) 次方的期望可以很自然地想到利用低次方和维护高次方和的套路进行处理,不过.由于这里的 \(k\) 达到 \(5\),直接这么处理一来繁琐,二来会爆 long lon ...
- 【bzoj3811】【清华集训2014】玛里苟斯
3811: 玛里苟斯 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 500 Solved: 196[Submit][Status][Discuss] ...
- UOJ #36「清华集训2014」玛里苟斯
这怎么想得到啊......... UOJ #36 题意:求随机一个集合的子集的异或和的$k$次方的期望值,保证答案$ \lt 2^{63},1 \leq k \leq 5$ $ Solution:$ ...
- BZOJ.3811.玛里苟斯(线性基)
BZOJ UOJ 感觉网上大部分题解对我这种数学基础差的人来说十分不友好...(虽然理解后也觉得没有那么难) 结合两篇写的比较好的详细写一写.如果有错要指出啊QAQ https://blog.csdn ...
随机推荐
- KeyPress 和KeyDown 、KeUp之间的区别
前几天,在写完一个功能模块上线测试的时候,出现了一个诡异的问题.input 框在输入查询内容之后,按回车键居然有两种不同的表现形式(input 框没有绑定键盘事件),谷歌和火狐功能正常,但IE在按了回 ...
- [iOS] 列表滑动展开隐藏头部HeaderView
平常遇到大多数的带有列表的应用都会遇到这个场景:在列表顶端有一个Header,当向上滑动列表时,压缩header,向下滑动列表到头时,展开header.这种样式在例如微博,twitter这些展示动态的 ...
- WebAPI返回时间数据不带T
最近一段时间项目里面使用WebAPI比较多,但是在返回时间数据的时候回默认带上T,就像这样子 "2016-04-21T13:26:17.4701811+08:00", 这样的数据在 ...
- LeetCode题解之 Convert Sorted Array to Binary Search Tree
1.题目描述 2.问题分析 使用二分法即可. 3.代码 TreeNode* sortedArrayToBST(vector<int>& nums) { ) return NULL; ...
- .NET笔试题集(五)
转载于:http://www.cnblogs.com/ForEvErNoME/archive/2012/09/15/2684938.html 1.什么是受管制的代码? 答:unsafe:非托管代码.不 ...
- SQL Server 合并复制的Article可以指定单个对象的更新方向
如下所示,这是SQL Server中一个合并复制发布端的Article: 我们可以在Article中选择一个对象,比如这里我们选择MD.Car表,点击鼠标右键,选择"Set Properti ...
- QT的初步学习笔记
一.Qt简介 1.Qt是什么:图形用户界面程序框架 能做界面的还有什么:MFC.GTK+ 2.Qt的由来和发展 3.为什么选择Qt 二.Qt环境与工具 1.工具 a.Qt助手:里面详细说明了Qt ...
- malloc,calloc,realloc函数用法,原理及不同解析
https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...
- [Spark SQL_1] Spark SQL 配置
0. 说明 Spark SQL 的配置基于 Spark 集群搭建 && Hive 的安装&配置 1. 简介 Spark SQL 是构建在 Spark Core 模块之上的四大 ...
- excle函数
1.time函数 说明: https://support.office.com/zh-cn/article/time-%E5%87%BD%E6%95%B0-9a5aff99-8f7d-4611-845 ...
