CSU1784
题意略。
思路:为了更好地求出一段连续数字的异或和,我们可以用前缀异或和来维护,现在我们只需要考虑每一个在数组中的数字向前异或,且在指定范围内,
异或值为全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的更多相关文章
随机推荐
- 在vue中创建自定义指令
原文:https://dev.to/ratracegrad/creating-custom-directives-in-vue-58hh 翻译:心上有杨 指令是带有 v- 前缀的特殊属性.指令的作用是 ...
- mysql添加外键失败解决方案
mysql重启命令: [root@wshCentOS centOS7Share]# service mysqld stopRedirecting to /bin/systemctl stop mys ...
- ~~面向对象进阶——__name__=="__main__"~~
进击のpython 面向对象进阶--__name__=="__main__" 前面我们在讲模块的时候,其实还有一个知识点没有很好的讲 那就是main和name 可能你们在看一些代码 ...
- python语言快捷注释
1.注释单行 (1)方法1:直接在单行代码前边加 # (2)方法2:选中需要注释的代码,Ctrl+/ 即可注释 2.注释多行代码 选中想要注释的N行代码,直接Ctrl+/ 即可注释 3.取消注释多行代 ...
- TIJ读书笔记-第21章-并发
一本Think in java,从去年6月份开始读,读了快一年了,也快读完了,然而回头想想,却好像什么也不记得了,好记性不如烂笔头,那就从现在开始记录一下吧.由于现在在读的是并发,那就先从这章开始吧. ...
- ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建
在上一个小系列文章<ASP.NET Core on K8S学习初探>中,通过在Windows上通过Docker for Windows搭建了一个单节点的K8S环境,并初步尝试将ASP.NE ...
- Asp.Net MVC SingleServiceResolver类剖析
SingleServiceResolver一般用于类工厂创建和注入点接口留白.类工厂创建比如Controller控制依赖于此类的创建,注入点留白实质上是依赖注入所对外预留的接口. 以第二个特性为例. ...
- 【有容云干货-容器系列】Kubernetes调度核心解密:从Google Borg说起
在之前“容器生态圈脑图大放送”文章中我们根据容器生态圈脑图,从下至上从左至右,依次介绍了容器生态圈中8个组件,其中也提到Kubernetes ,是一个以 Google Borg 为原型的开源项目.可实 ...
- S2:log4j
配置步骤 1.引入jar,放到lib中,jar包被项目管理 2.在src目录下copy了一个文件log4j.properties 3.使用Logger String word="会员登记 ...
- mac下安装mongodb数据库教程
前言 由于最近在学习node+express,学习到持久化存储章节需要连接mongodb数据库,然后之前也有试过安装mongodb但是失败了,这次就找了很多资料,终于安装完成了,故此记录下来安装步骤, ...