就是要第一个出场的albus 【BZOJ】 线性基
就是我代码里读入之后的那一部分。
1.(一下a[]为原数组 a'[]为线性基)
线性基 中的a'[i]其实 是 原来的a[]中的某个子集(2^n个子集中的某个) 异或出来的 可能会有其他的子集与它异或和相同,a'[i]代表了 这个集合。
线性基的大小是log的,因为 a[]中异或和等于a'[i]的集合可能有好多 而线性基则 通过异或消掉了这些 重复的。
2.
假设a[]大小为n 线性基大小为k,则a[]和a'[] 都有且仅有2^k种 异或和不同 的子集【清楚线性基定义的话 这是显然的】
然而由于本题 要保留重复的, 那么另一个性质就是 a'[]可异或出的2^k种异或和 在a[]可异或出的2^n个有重复的值中 每个不同的值都有2^(n-k)个。
所以最后ans要*2^(n-k)
#include <bits/stdc++.h>
#define mo 10086
using namespace std;
int b[],a[],n,m,k,t,x,y,z,p,q,ans;
int main(){
scanf("%d",&n);
for (int i=;i<=n;++i) scanf("%d",&a[i]);
scanf("%d",&m); k=;
for (int i=<<;i;i>>=){
for (int j=k+;j<=n;++j)
if (a[j]&i){
swap(a[j],a[++k]); b[k]=i;
for (int o=;o<=n;++o)
if (o!=k&&a[o]&i) a[o]^=a[k];
break;
}
}
for (int i=;i<=k;++i)
if ((x^a[i])<=m){
x^=a[i];
(ans+=(<<k-i)%mo)%=mo;
}
for (int i=k+;i<=n;++i) (ans<<=)%=mo;
++ans%=mo; printf("%d",ans);
return ;
}
Archer
就是要第一个出场的albus 【BZOJ】 线性基的更多相关文章
- BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基
[题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...
- 2019年杭电多校第一场 1002题Operation(HDU6579+线性基)
题目链接 传送门 题意 初始时有\(n\)个数,现在有\(q\)次操作: 查询\([l,r]\)内选择一些数使得异或和最大: 在末尾加入一个数. 题目强制在线. 思路 对于\(i\)我们记录\([1, ...
- 2019牛客暑期多校训练营(第一场):XOR(线性基)
题意:给定数组,求所有异或起来为0的集和的大小之和. 思路:由于是集合大小,我们换成考虑每个元素在多少个集合里有贡献. 先生成线性基. 对于没有插入线性基的元素x,贡献是2^(N-base-1),因为 ...
- BZOJ 2844: albus就是要第一个出场 [高斯消元XOR 线性基]
2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x ...
- BZOJ 2844: albus就是要第一个出场
2844: albus就是要第一个出场 Time Limit: 6 Sec Memory Limit: 128 MBSubmit: 1134 Solved: 481[Submit][Status] ...
- bzoj 2844: albus就是要第一个出场 高斯消元
LINK 题意:看题目不如看样例解释.给出有n个数的集合,对这些子集中的数求异或,升序统计所有子集得到的数(重复会被计入),询问一个数x,问这个数出现的第一个位置 思路:在这里要求一个所有可能出现的异 ...
- bzoj 2844 albus就是要第一个出场 - 线性基
题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 给定集合$S$,现在将任意$A\subseteq S$中的元素求异或和,然后存入一个数组中(下标从1开始),然后从小到大排 ...
- CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场
CF895C: Square Subsets && [BZOJ2844]albus就是要第一个出场 这两道题很类似,都是线性基的计数问题,解题的核心思想也一样. CF895C Squa ...
- 2844: albus就是要第一个出场
2844: albus就是要第一个出场 链接 分析: 和HDU3949差不多互逆,这里需要加上相同的数. 结论:所有数任意异或,构成的数出现一样的次数,次数为$2^{n-cnt}$,cnt为线性基的大 ...
随机推荐
- 69. JPA实体Bean的生命周期【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 在使用JPA的时候,如果对bean的生命周期不了解的话,难免会碰到一些问题,比如:InvalidDataAccessApiUsageExcepti ...
- 【博弈+GCD】C. Alice and Bob
https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/C [题意] 初始时有n个数,定义操作为从n个数中取出两个数x,y,如果|x-y| ...
- 通过复制现有的redhat虚拟机的文件,实现在VMWare8.0上重建一个新的redhat虚拟机环境
1.将需要复制的redhat虚拟机的文件都存放在一个新的文件夹redhat下,因为虚拟机很大,所以复制可能花费较长的时间. 2.复制完成后,打开VMWare,选择“Open a Virtual Mac ...
- codeforces 1041 d 二分
题意转化:有一些区间,要求选一些连续的区间.两两区间间隔的和要求小于H.要求区间的长度和尽可能长. 二分区间长度的和,check一下就行 #include <bits/stdc++.h> ...
- Piggy-Bank--hdu1114(完全背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1114 Problem Description Before ACM can do anything, a bud ...
- 在d盘中创建一个文件夹 在文件夹里创建三个txt文本
import java.io.File; import java.io.IOException; public class FileDemo { public static void main(Str ...
- sklearn特征工程总结
转自: http://www.cnblogs.com/jasonfreak/p/5448385.html https://www.zhihu.com/question/28641663/answer/ ...
- 【c++】动态内存
静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.它主要存放静态数据.全局数据和常量.注意:const常量在定义时必须初始化 栈区:在执行函数时,函数内局部变量的存储单 ...
- html 元素定位position-relative, absolute, fixed, static
看到这个,你有什么想法? Difference between static and relative positioning 如果你能完全看明白,那几本上css 元素定位的东西基本都会了.本文也不用 ...
- iptables防火墙以及网络协议基本原理
一. Linux 网络安全模型 1. 防火墙: 工作在主机或者网络边缘,对进出报文使用实现定义的规则进行检测,并且由匹配的规则进行处理的一组硬件或者软件.也可能两者结合. 1) 通常使用的防火墙设备 ...