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的更多相关文章
随机推荐
- [03] HEVD 内核漏洞之UAF
作者:huity出处:https://www.cnblogs.com/huity35/p/11240997.html版权:本文版权归作者所有.文章在博客园.个人博客同时发布.转载:欢迎转载,但未经作者 ...
- Linux C 网络编程——多线程的聊天室实现(服务器端)
服务器端的主要功能: 实现多用户群体聊天功能(此程序最多设定为10人,可进行更改),每个人所发送的消息其他用户均可以收到.用户可以随意的加入或退出(推出以字符串"bye"实现),服 ...
- luogu题解 P5022 【旅行】
本人的代码可以说洛谷最简单的了 我的存图方式有些与众不同 a[5000][5000]中第一个下标表示第几个点,第二个表示与点相连的点 虽然比前向星废内存但时间极快,大概是O(n)的. 现在步入正题 6 ...
- ThinkPHP 5.0 配置
ThinkPHP 5.0 配置 目录 <!-- 系统默认的配置文件目录就是应用目录(APP_PATH), 也就是默认的application下面,并分为应用配置 (整个应用有效)和模块配置(仅针 ...
- Maven重新下载未下载完成的jar包
使用maven下载jar包,经常会遇到下载失败的情况,如果失败的jar包过多,或是不清楚到底有那些jar包在下载过程中出现了问题.可通过maven命令重新批量下载未成功的jar包. 1,打开cmd , ...
- SpringBoot(18)---通过Lua脚本批量插入数据到Redis布隆过滤器
通过Lua脚本批量插入数据到布隆过滤器 有关布隆过滤器的原理之前写过一篇博客: 算法(3)---布隆过滤器原理 在实际开发过程中经常会做的一步操作,就是判断当前的key是否存在. 那这篇博客主要分为三 ...
- springboot-权限控制shiro(二)
目录 1. 场景描述 2. 解决方案 1. 场景描述 (1)最近有点小忙,公司真实项目内容有点小多以及不想只介绍理论,就使用springboot单独部署了个shiro的demo项目,还是理论和实际项结 ...
- 创建软RAID5
一 创建4块硬盘组软 RAID5 新增四块20G的新硬盘,将四块硬盘分别分区,全部大小都分为一个区,并改 id 为 “ fd ” 1创建阵列mdadm -Cv /dev/md5 - ...
- win10+Anaconda3+CUDA9.0+CUDNN7.1+TensorFlow-gpu1.9+Pycharm
想在win10上运行下YOLO的例子,要先配置环境,折腾了两天,终于好了,整理下自己觉得有用且正确的流程. win10+Anaconda3+CUDA9.0+CUDNN7.1+TensorFlow1.9 ...
- MyBatis 核心配置综述之 ResultSetHandler
目录 ResultSetHandler 简介 ResultSetHandler 创建 ResultSetHandler 处理结果映射 DefaultResultSetHandler 源码解析 我们之前 ...