首页 > Xorto
头像 Kur1su
发表于 2020-04-14 11:27:19
Solution 这是一道数组上的异或问题, 这类问题一般要使用前缀异或和作为辅助, 即sum[i] = a[1] ^ a[2] ..... ^ a[i];它具有这样的性质sum[i] ^ sum[j - 1] = a[j] ^ a[j + 1] .... ^ a[i]; (i >= j)其次 展开全文
头像 一只橘橘猫
发表于 2020-04-13 14:34:23
题意:可以简单理解成,存在多少对不重叠的非空区间,且区间异或值相等 思路:根据前缀异或和的性质,设表示的区间异或和,那么的区间异或值就等于,因为只有,双重循环遍历,枚举端点,先记录以为右端点的所有区间异或值,存到数组,然后再记录以为左端点的值,保证区间不重叠,更新答案 时间复杂度: 代码: # 展开全文
头像 sunrise__sunrise
发表于 2020-04-13 16:16:29
题目大意 存在多少对不重叠非空的区间,异或值相同。 解题思路 因为对于异或来说,前缀和性质依然适用, 预处理从1到i的异或和这样我们可以求到我们枚举左区间的右端点 ,求得以i为右端点的全部区间异或值。并且枚举以 为左端点的所有区间是否有和前面异或值相同的,如果相同更新答案。 时间复杂度 Code 展开全文
头像 hnust_yangyanjun
发表于 2020-04-13 16:22:31
题意:求一个数组中的有多少组两个互不相交的区间异或和为零。思路:直接暴力,从左到右枚举数组,将以当前元素的前一个元素为右端点,枚举该类区间的异或和,用一个数组仿map容器记录个数,再以当前元素左端点,枚举该类区间的异或和,将map容器中值相同的数的个数加起来就是结果了 代码: #include< 展开全文
头像 shyyhs
发表于 2021-01-07 00:57:07
本题首先应该记录一个异或前缀和,然后每次在移动端点的同时更新左区间的值的数量,同时我是枚举的端点,所以右边也被统计了. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e3+ 展开全文
头像 塞蒙尘
发表于 2020-04-13 16:01:59
Solution (用表示异或运算) 因为当且仅当时才有,所以题目要求的就是有多少对区间的异或和相等且不重叠。 设为右端点小于且异或和为的区间的个数,此时,若区间的异或和为,那么它对答案的贡献为。 枚举,首先对所有左端点为的区间计算贡献,然后利用右端点为的区间来更新。 总复杂度。 Code #inc 展开全文
头像 wxyww
发表于 2020-04-13 16:25:44
solution 计算区间异或和可以利用前缀异或和计算。因为n只有,所以只要在复杂度内解决就好了。 然后考虑如何保证区间不相交。枚举一个点。用表示右端点小于等于x的区间中异或和为的区间数量。然后枚举一下左端点大于x的区间,如果该区间的异或和为那么就将答案加上。 code /* * @Author: 展开全文
头像 hnust_liuzelin
发表于 2020-04-13 16:40:41
知识点:前缀和(可有可无,不过看着舒服...)题意:给出一个长度为n的数组,求互不重叠的、异或和为零的非空区间对个数。思路:给出一个从左到右移动的分界线,统计左边异或和值个数,累加左边与右边区间异或和值相同的区间个数。为了防止重复,左边只统计包含分界线的区间,右边只统计与分界线相邻的区间。代码: # 展开全文
头像 liyiHuan
发表于 2023-05-29 09:07:48
二分+桶枚举 #include <bits/stdc++.h> #define int long long #define Endl '\n' using T = std::vector<int> ; constexpr int N = 3e5 + 12; conste 展开全文
头像 人丑心更黑
发表于 2021-02-25 15:46:09
给自己跪了,这道题居然没做出来o(╥﹏╥)o 题目大意:给定一个长度为n的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为0。n<=1000,数组中的数字<100000 思路:一开始想的是枚举中间点,然后开一个f[i][k]数组表示到i点异或和为k的数量,然后从左算一 展开全文

等你来战

查看全部