洛谷P4869 albus就是要第一个出场(线性基)
不知道线性基是什么东西的可以看看蒟蒻的总结
线性基居然有这性质我还不知道orz
假设$n$个数的线性基中有$k$个数,那么显然共有$2^k$个不同的异或和,而其中每一个异或和的出现次数都是$2^{n-k}$
感性理解一下的话……就是不在线性基中的每一个数字都可以被线性基中的数字表示出来从而异或之后为0,那么这些数字都可以看做0,
所以每一个异或和都可以异或上0变成自己,那么0有多少种选法呢?加上空集就是$2^{n-k}$种
然后只要算出$q$之前有多少个数就好了……
然后这个东西具体怎么算……看代码好了……
//minamoto
#include<iostream>
#include<cstdio>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while((ch=getc())>''||ch<'')
(ch=='-')&&(flag=true);
for(res=num;(ch=getc())<=''&&ch>='';res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int mod=;
int b[],st[],top,n,q,rk;
inline int ksm(int x,int y){
int res=;
while(y){
if(y&) (res*=x)%=mod;
(x*=x)%=mod,y>>=;
}
return res;
}
void insert(int x){
for(int i=;i>=;--i)
if(x>>i&){
if(!b[i]) return (void)(b[i]=x);
x^=b[i];
}
}
int main(){
// freopen("testdata.in","r",stdin);
n=read();
for(int i=,x;i<=n;++i) insert(x=read());
q=read();
for(int i=;i<=;++i)
if(b[i]) st[top++]=i;
for(int i=;i<top;++i)
if(q>>st[i]&) rk+=<<i;
printf("%d\n",(1ll*rk*ksm(,n-top)+)%mod);
return ;
}
洛谷P4869 albus就是要第一个出场(线性基)的更多相关文章
- BZOJ2844: albus就是要第一个出场(线性基)
		
Time Limit: 6 Sec Memory Limit: 128 MBSubmit: 2054 Solved: 850[Submit][Status][Discuss] Descriptio ...
 - bzoj 2844 albus就是要第一个出场 - 线性基
		
题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 给定集合$S$,现在将任意$A\subseteq S$中的元素求异或和,然后存入一个数组中(下标从1开始),然后从小到大排 ...
 - albus就是要第一个出场(线性基)
		
传送门 这个题题目描述真怪异--就不能说人话吗-- 人话:给定长为n的序列A,定义f(s)为集合s内所有元素异或值,求A的所有子集的f值从小到大排列后,q在其中第一次出现的下标对10086取模的值. ...
 - 洛谷P3389 高斯消元 / 高斯消元+线性基学习笔记
		
高斯消元 其实开始只是想搞下线性基,,,后来发现线性基和高斯消元的关系挺密切就一块儿在这儿写了好了QwQ 先港高斯消元趴? 这个算法并不难理解啊?就会矩阵运算就过去了鸭,,, 算了都专门为此写个题解还 ...
 - 洛谷P4151 [WC2011]最大XOR和路径(线性基)
		
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 首先看到异或就想到线性基 我们考虑有一条路径,那么从这条路径走到图中的任意一个环再走回这条路径上,对答案的贡献是这个环的异或和,走到这个环上的路径对 ...
 - BZOJ 2844: albus就是要第一个出场 [高斯消元XOR 线性基]
		
2844: albus就是要第一个出场 题意:给定一个n个数的集合S和一个数x,求x在S的$2^n$个子集从小到大的异或和序列中最早出现的位置 一开始看错题了...人家要求的是x第一次出现位置不是第x ...
 - CF895C: Square Subsets && 【BZOJ2844】albus就是要第一个出场
		
CF895C: Square Subsets && [BZOJ2844]albus就是要第一个出场 这两道题很类似,都是线性基的计数问题,解题的核心思想也一样. CF895C Squa ...
 - BZOJ 2844: albus就是要第一个出场
		
2844: albus就是要第一个出场 Time Limit: 6 Sec Memory Limit: 128 MBSubmit: 1134 Solved: 481[Submit][Status] ...
 - 2844: albus就是要第一个出场
		
2844: albus就是要第一个出场 链接 分析: 和HDU3949差不多互逆,这里需要加上相同的数. 结论:所有数任意异或,构成的数出现一样的次数,次数为$2^{n-cnt}$,cnt为线性基的大 ...
 
随机推荐
- 【BZOJ4293】[PA2015]Siano 线段树
			
[BZOJ4293][PA2015]Siano Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会 ...
 - Hadoop实战-Flume之Hdfs Sink(十)
			
a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.sources.r1.type = ...
 - Android笔记之强大的buildConfigField
			
在进行项目开发或维护时,经常会遇到调试和发布所用到的参数值不一致的情况 例如,服务器会分测试和正式,为了能方便地更改(自动更换)服务器地址,buildConfigField就派上用场了 以前都是手动更 ...
 - DuiLib笔记,基于WindowImplBase的基础模板
			
Main.cpp #include <UIlib.h> using namespace DuiLib; class MainWindow : public WindowImplBase { ...
 - Javascript学习之Date对象详解
			
1.定义 创建 Date 实例用来处理日期和时间.Date 对象基于1970年1月1日世界协调时起的毫秒数 2.语法 构造函数 new Date() new Date(value) value代表自世 ...
 - 浏览器访问配置完成的ftp服务器
			
在浏览器的地址栏输入: ftp://testuser:testuser@192.168.10.4 testuser 是ftp的用户名和密码: 192.168.10.4 是ftp服务器的IP地址. 亲测 ...
 - win10安装VMware
			
首先下载VMware安装包: 双击安装: 点击:“uninstall”安装,这个过程需要一些时间 点击“Next” 选择典型或者自定义安装 这里我选择的是典型安装,点击“Next”: 选择是否检查更新 ...
 - 谷歌浏览器使用SelectorGadget和Xpath Helper获取xpath和css path
			
在上篇文章里,介绍了如何在火狐浏览器中获取网页元素的xpath和css path. 这篇文章将介绍,在谷歌浏览器中使用SelectorGadget和Xpath Helper实现同样功能. 这两个谷歌浏 ...
 - eclipse 中PlantUML的安装和使用
			
安装: 填写的地址:http://hallvard.github.io/plantuml/ 安装完plantUML后,还要下载一个Graphviz https://pan.baidu.com/s/1g ...
 - OSI和TCP/IP
			
OSI和TCP/IP 1. OSI的七层网络结构(功能及特点) 1) 物理层:为数据链路层提供物理连接,在其上串行传送比特流,即所传送数据的单位是比特.此外,该层中还具有确定连接设备的 ...