题意略。

思路:为了更好地求出一段连续数字的异或和,我们可以用前缀异或和来维护,现在我们只需要考虑每一个在数组中的数字向前异或,且在指定范围内,

异或值为全1的个数有多少个。算出每一个位子能做出的贡献,最后相加就可以了。

比如说现在的前缀xorsum = 1010,我们只需要知道在当前位置之前有多少个地方的xorsum值是0101,xor操作后,我们就可以得到这一段的异或值,

且长度要满足题意。

我们如果能记录下当前位子之前所有xorsum = 0101的下标就好了,最好还是有序的,这样就可以用二分查找来优化了。

这个可以用map<LL,vector<int> > 来做到。

我们一边计算,一边维护。

详见代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<map>
#include<vector>
#define maxn 300005
using namespace std;
typedef long long LL; map<LL,vector<int> > mp;
int n,m,a,b;
char str[];
LL store[maxn];
const LL one = ; LL getans(LL tar,int idx){
vector<int>& v = mp[tar];
int up = idx - a;
int down = idx - b;
down = lower_bound(v.begin(),v.end(),down) - v.begin();
up = upper_bound(v.begin(),v.end(),up) - v.begin();
return LL(up - down);
} int main(){
int cas = ;
while(scanf("%d%d%d%d",&n,&m,&a,&b) == ){
mp.clear();
for(int i = ;i < m;++i){
scanf("%s",str);
LL s = ;
for(int j = n - ,k = ;j >= ;--j,++k){
s += LL(str[j] - '')<<(LL)k;
}
store[i + ] = s;
}
LL total = (one<<n) - one;
LL sum = ;
LL ans = ;
mp[sum].push_back();
for(int i = ;i <= m;++i){
sum = sum ^ store[i];
LL other = total ^ sum;
ans += getans(other,i);
mp[sum].push_back(i);
}
printf("Case %d: %lld\n",cas++,ans);
}
return ;
}

CSU1784的更多相关文章

随机推荐

  1. python检测变量名

    python检测变量名 变量在编程中的用途非常广,在python中,变量的名称只能以字母或者下划线“_”开头,变量名只能由字母.数字.下划线组成. 编写python,使得其实现以下功能: 1.输入一个 ...

  2. [转]PHP的类自动加载机制,spl_autoload_register使用介绍

    转自 http://blog.csdn.net/hguisu/article/details/7463333: 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和requ ...

  3. 【RabbitMQ】一文带你搞定RabbitMQ延迟队列

    本文口味:鱼香肉丝   预计阅读:10分钟 一.说明 在上一篇中,介绍了RabbitMQ中的死信队列是什么,何时使用以及如何使用RabbitMQ的死信队列.相信通过上一篇的学习,对于死信队列已经有了更 ...

  4. oracle常用的一些sql命令

    //查看系统当前时间   HH24 24小时制  MI是正确的分钟 select to_char(sysdate,'yyyy-mm-dd HH24:MI:SS') from dual //HH非24 ...

  5. Zabbix利用Windows性能监视器监控各项资源指标

    zabbix自带的windows监控模板并没有监控windows cpu使用率的监控 在cmd命令输入perfmon 打开后默认就一项CPU占用的监控,下面以添加硬盘空闲时间做示例 1:监控图形上面右 ...

  6. Vmware Exsi使用简要说明

    界面介绍 Exsi的管理工具可以用vSphere Client来管理虚拟机.管理虚拟的网络交换机.管理物理机的内存.物理机的硬盘.物理机的CPU等资源.界面的大致介绍如下图. 资源分配 创建内存.CP ...

  7. AppBoxFuture: 123挨个站-数据按序存储

      最近几天在优化存储的编码规则,顺带把之前设计了但未实现的倒排序一并实现了.由于所有数据(元数据.实体.索引等)都映射至RocksDB的Key-Value存储,所以必须扩展RocksDB的自定义比较 ...

  8. ssm 搭建项目各项配置

    首先配置 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

  9. React-Native之打包发布(Android)

    React-Native之打包发布(Android) 一,介绍与需求 移动端打包发布到应用市场 二,发布配置 注意:以下所有操作都在win10下进行,React Native版本0.59.5,andr ...

  10. LeetCode——372. Super Pow

    题目链接:https://leetcode.com/problems/super-pow/description/ Your task is to calculate ab mod 1337 wher ...