【CodeChef PREFIXOR】Prefix XOR】的更多相关文章

https://odzkskevi.qnssl.com/f0fbdb108ec813b1294f8f714805963b?v=1502083692 网上搜到的题解: http://blog.csdn.net/zzkksunboy/article/details/76563303 xor的题,一般是考虑第一个不一样的位. 这个题当时考虑都是从字典树解决.这题可以对每个左边界找到最远的右边界,记作数组num[i]. 答案算两个部分,一个是num[i](l<=i<=r)小于等于r的,一个是num[i…
zky学长提供的线性基求法: for(int i=1;i<=n;i++) for(int j=64;j>=1;j--) { if(a[i]>>(j-1)&1) { if(!lb[j]){lb[j]=a[i];break;} else a[i]^=lb[j]; } } Gauss消元求线性基的方法: #include<cstdio> #include<cstring> #include<algorithm> #define read(x)…
BUPT2017 wintertraining(15) #7C 题意 求[min((Z+L)%N,(Z+R)%N)+1,max((Z+L)%N,(Z+R)%N)+1]中不同前缀的个数,Z是上次询问的结果,N是字符串总个数.Q次询问. 题解 用主席树,即函数式线段树,维护前i个字符串的区间和(每个区间的前缀个数之和). 读入每个字符串后,用Trie树给它的每个前缀分配ID,并记录每个前缀最后出现的位置pre[cur],如果当前的前缀出现过,则线段树中上一次出现的位置的值-1,相当于只把这种前缀记录…
原文链接 https://www.cnblogs.com/cly-none/p/9813163.html 题意:给出初始序列\(a\)和目标序列\(b\),都有\(n\)个元素.每次操作可以把\(a\)中的一个元素替换为\(a\)中所有元素的异或和,问最少操作多少次,把序列\(a\)变成序列\(b\),或判断无解. \(n \leq 10^5\) 首先,这个"替换为所有元素的异或和",其实就是一开始有\(v\)为\(a\)中所有元素异或和,每次操作把\(a\)中某个元素与\(v\)交换…
4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 475  Solved: 287[Submit][Status][Discuss] Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = 4+1+1 7 = 4+1+1+1 8无法表示为集合S的子集的…
给你n个数,问你将它们取任意多个异或起来以后,所能得到的第K小值? 求出线性基来以后,化成简化线性基,然后把K二进制拆分,第i位是1就取上第i小的简化线性基即可.注意:倘若原本的n个数两两线性无关,也即线性基的大小恰好为n时,异或不出零,否则能异或出零,要让K减去1. 这也是线性基的模板. #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ll d[64],p[64]; int…
点此看题面 大致题意: 给你两棵\(n\)个点的树,对于第一棵树中的每条边\(e_1\),求存在多少条第二棵树中的边\(e_2\),使得第一棵树删掉\(e_1\)加上\(e_2\).第二棵树删掉\(e_2\)加上\(e_1\)后皆仍为生成树. 题意转化 考虑对于\(e_1(x,y)\),合法的\(e_2(u,v)\),必然存在于第二棵树中\(x\)到\(y\)的路径之上. 同理,则\(e_1\)也应该存在于第一棵树中\(u\)到\(v\)的路径之上. 考虑到我们是在枚举\(e_1\),而每条边都…
[题目描述:] AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r],伤害为伤害串的这个范围内中1的个数 3. 会被随机修改伤害串中的数值,修改的方法是把[l,r]中的所有数xor上1 AKN想知道一些时刻的伤害,请你帮助他求出这个伤害 [输入格式:] 第一行两个数n,m,表示长度为n的01串,有m个时刻 第二行一个长度为n的01串,为初始伤害串 第三行开始…
[CodeChef]Querying on a Grid(分治,最短路) 题面 Vjudge CodeChef 题解 考虑分治处理这个问题,每次取一个\(mid\),对于\(mid\)上的三个点构建最短路径树(因为保证了最短路唯一所以是树). 如果两点之间的最短路径跨越了\(mid\),那么必定有\(dis[u]+dis[v]\)的和就是最短路径长度. 那么我们在分治过程中考虑每一个\(mid\),取其中\(dis[u]+dis[v]\)的最小值,这样子就很容易可以找到最短路径长度. 然后知道了…
[CodeChef]Palindromeness(回文树) 题面 Vjudge CodeChef 中文版题面 题解 构建回文树,现在的问题就是要求出当前回文串节点的长度的一半的那个回文串所代表的节点 定义\(half\)表示长度最长并且长度小于等于当前节点长度一半的回文串所代表的节点 \(half\)的求法,如果当前点的\(len=1\),\(half\)不存在 否则,从构建回文树时的父亲节点(不是\(fail\)指针)所代表的那个点的\(half\)开始 暴力跳\(fail\),直到找到满足条…