题意略。

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

异或值为全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. PHP ErrorException 积累

    ErrorException [不定时更新] ErrorException1: Undefined index: allocate 描述:PHP默认会对未声明变量进行提示,这种默认的提示是可以进行忽略 ...

  2. nodejs 如何自动化配置环境参数

    应用场景: 最近用 node 重构了网站的项目,部署到测试环境的时候测试一切正常. 直到有一天,运维把代码上线到内测环境的时候...... 突然发现:内测环境和测试环境竟然是同一台服务器,只不过是把代 ...

  3. 287. 寻找重复数 Java解法

    287. 寻找重复数 这题的难点就在于下面的说明了,我们先不管下面的那些说明的要求,用常规的解法来解答下上的题目. 排序思想解法 先把原来的数组进行排序,然后逐个遍历,一旦发现后一个元素和当前的元素相 ...

  4. 使用ASM实现动态代理

    如果对我这段代码感兴趣,直接拷贝测试debug,要不然你不知道我写的是什么鬼,如果有什么问题,可以告诉我. 一.实现动态代理,首先得考虑有应该定义哪些类,根据JDK的动态代理思想,那么它就应该有一个生 ...

  5. Prometheus 整合 AlertManager

    简介 Alertmanager 主要用于接收 Prometheus 发送的告警信息,它很容易做到告警信息的去重,降噪,分组,策略路由,是一款前卫的告警通知系统.它支持丰富的告警通知渠道,可以将告警信息 ...

  6. 基于zookeeper集群的云平台-配置中心的功能设计

    最近准备找工作面试,就研究了下基于zookeeper集群的配置中心. 下面是自己设想的关于开源的基于zookeeper集群的云平台-配置中心的功能设计.大家觉得哪里有问题,请提出宝贵的意见和建议,谢谢 ...

  7. 【转载】【VSCode】Windows下VSCode编译调试c/c++

    转载自:http://blog.csdn.net/c_duoduo/article/details/51615381 懒得自己配置或自己配置出现不明问题的朋友可以点这里: [VSCode]Window ...

  8. 挂起(suspend)与线程阻塞工具类LockSupport

    挂起(suspend)与线程阻塞工具类LockSupport 一般来说是不推荐使用suspend去挂起线程的,因为suspend在导致线程暂停的同时,并不会去释放任何锁资源. 如果其他任何线程想要访问 ...

  9. 派胜OA二次开发笔记(1)重写主界面

    最近从派胜OA 2018 升级到 2019,为了二次开发方便,索性花了两天,反向分析 PaiOA 2019 主界面程序,重写大部分代码,方便对菜单权限进行控制. 主界面/core/index.aspx ...

  10. DataPipeline丨DataOps理念与设计原则

    作者:DataPipeline CEO 陈诚 上周我们探讨了数据的「资产负债表」与「现状」,期间抛给大家一个问题:如果我们制作一个企业的“数据资产负债表”,到底会有多少数据是企业真正的资产? 数据出现 ...