CF959F
题目大意:给定n个数,有Q次询问,每次询问由两个数l,x组成,表示前缀[1,l]构成的子序列有多少异或起来为x,个数%1e9+7
做法:考虑一个由x个数构成的线性基,如果这个线性基由Y个数构成,可以通过线性基得到z,那么x个数得到z的方案为2^(Y-x),不在线性基中的数随便选
然后就变成斯波题了,维护一个前缀线性基就好了
代码:
#include<bits/stdc++.h>
#define Mod 1000000007
#define N 100005
using namespace std;
int a[N],b[N][22],cnt[N],bin[N],n,Q,x,y;
inline bool check(int x,int y){
for (int i=20;~i;i--){
if (y&(1<<i)){
if (!b[x][i]) return 0;
y=y^b[x][i];
}
}
return y==0;
}
int main(){
scanf("%d%d",&n,&Q);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
for (int i=1;i<=n;i++){
for (int j=0;j<=20;j++) b[i][j]=b[i-1][j];
cnt[i]=cnt[i-1];
for (int j=20;~j;j--){
if (a[i]&(1<<j)){
if (!b[i][j]){b[i][j]=a[i];cnt[i]++;break;}
else a[i]^=b[i][j];
}
}
}bin[0]=1;
for (int i=1;i<=n;i++) bin[i]=1ll*bin[i-1]*2%Mod;
while (Q--){
scanf("%d%d",&x,&y);
if (!check(x,y)) puts("0");
else printf("%d\n",bin[x-cnt[x]]);
}
return 0;
}
CF959F的更多相关文章
- [CF959F]Mahmoud and Ehab and yet another xor task题解
搞n个线性基,然后每次在上一次的基础上插入读入的数,前缀和线性基,或者说珂持久化线性基. 然后一个num数组记录当时线性基里有多少数 然后每次前缀操作一下就珂以了 代码 #include <cs ...
随机推荐
- EBS密码加密研究
DECLARE v_password_1 VARCHAR2(240); v_password_2 VARCHAR2(240); v_password_3 VARCHAR2(240); ...
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十一):完善游戏逻辑
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- J2EE进阶(十二)SSH框架整合常见问题汇总(三)
在挂失用户时,发现userid值为空,但是在前台输入处理账号22时,通过后台输出可以看出,后台根据前端输入在数据库中查询到结果对象并输出该对象的userid,而且Guashi对象也获取到了其值. 解决 ...
- Java并发——线程池原理
"池"技术对我们来说是非常熟悉的一个概念,它的引入是为了在某些场景下提高系统某些关键节点性能,最典型的例子就是数据库连接池,JDBC是一种服务供应接口(SPI),具体的数据库连接实 ...
- [GitHub]第三讲:简单分支操作
Git 最核心的操作对象是版本( commit ),最核心的操作技巧就是分支. 什么是分支? 仓库创建后,一旦有了新 commit,默认就会放到一个分支上,名字叫 master.前面咱们一直看到的多个 ...
- 控件之combox
一. combox显示 首先combox有两个属性来存储数据:DisplayMember(显示成员),ValueMember(值成员) ,DisplayMember是我们在combox界面上看 ...
- 青年菜君与小农女送菜商业模式PK
青年菜君与小农女送菜商业模式PK 对比项 青年菜君 小农女送菜 优势 劣势 开业 2014年3月3日 2013年9月 渠道 地铁捕获用户 写字楼配送 送货 来店面自取 送货到写字楼 菜君 1.减少 ...
- java的map
Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射. 这里有详细的论述http://www.oracle.com/technetwork/c ...
- Linux搭建GIT 使用Eclipse创建并上传Git项目 EGit操作
Linux搭建Git 1. gitblit服务器文档 http://gitblit.com/setup_go.html 2. 安装jdk 参考 http://blog.csdn.net/jerome_ ...
- IE11 开启F12开发人员工具中的 始终从服务器刷新
在进行页面脚本调试时,经常需要清除浏览器缓存来获取最新的脚本文件,IE11之前的浏览器版本我们可以按F12调出开发人员工具,在缓存选项中开启"始终从服务器中刷新"的设置后我们就不需 ...