CF1101G (Zero XOR Subset)-less】的更多相关文章

题目地址:CF1101G (Zero XOR Subset)-less 线性基基础题 预处理一个前缀异或和 \(s_i\) 这样题目就变成了:在 \(n\) 个 \(s_i\) 中尽量选择多的数使选择的数产生的任意子集的异或和不为 \(0\) ,其中必须要选 \(s_n\) 如果 \(s_n=0\) ,则无解,输出 \(-1\) 否则,贪心,能选尽量选 代码: #include <bits/stdc++.h> using namespace std; const int N = 200006;…
传送门 既然每一次选择出来的都是一个子段,不难想到前缀和计算(然而我没有想到--) 设异或前缀和为\(x_i\),假设我们选出来的子段为\([1,i_1],(i_1,i_2],...,(i_{k-1},N]\),那么我们选择出来的子段的异或和为\(x_{i_1} , x_{i_2}\ xor\ x_{i_1},...,x_{i_{k-1}}\ xor\ x_N\). 又因为我们需要避免的是任意子段集合的异或和不为\(0\),那么将这些异或和互相异或对于这个命题是否成立不会产生影响.那么从第二项开…
(Zero XOR Subset)-less 题意 :把n个数分成多个集合,要求 不能有集合为空,最终不能有非空子集合异或值为0,尽可能划分的多一些. 思路 :非法情况就只有 n个数异或 为0,其他的情况集合个数就是线性基的内元素的个数.(因为有 基 就可以保证不为0,并且不可以再增加元素) 基 类似 极大线性无关组 .已经是最大的了,不可以再多. #include<bits/stdc++.h> using namespace std; #define ll long long #define…
题目传送门 题意:给出一个序列,试将其划分为尽可能多的非空子段,满足每一个元素出现且仅出现在其中一个子段中,且在这些子段中任取若干子段,它们包含的所有数的异或和不能为0. 思路:先处理出前缀异或,这样选择更多的区间其实就相当于选择更多的前缀异或,并且这些前缀异或不能异或出0,这就变成了线性基的基础题了.贪心的放,能放就放.不能放就意味着线性基的add函数里面的val最后变成了0,也就是当前已经插入的线性基已经可以异或出正在插入的数了,所以不能放. (今天真巧,一连遇到两道线性基的题目) #inc…
You are given an array a1,a2,…,an of integer numbers. Your task is to divide the array into the maximum number of segments in such a way that: each element is contained in exactly one segment; each segment contains at least one element; there doesn't…
题目分析: 考虑到这是一个区间的异或问题,不妨求出前缀和,令$sum[i] = Xor_{j=1}^{i}a[j]$. 对于区间$[l,r]$的异或结果,等于$sum[r] \oplus sum[l-1]$.那么原问题等价于选尽量多的点$p_x$,使得这些点构成的$sum[p_x] \oplus sum[p_{x-1}]$的子集的异或非$0$.我们不断往前异或,可以把问题转化为选尽量多的$p_x$,使得$sum[p_x]$的子集的异或非$0$.这是因为这两者的线性基等价. 这样子这题就变成BZO…
题目链接:http://codeforces.com/contest/1101/problem/G 题目大意:给你n个数,然后让你把这n个数分成尽可能多的集合,要求,每个集合的值看做这个集合所有元素的异或值,并且任意个集合对应的值,再进行异或也不能为0,然后如果不存在合理的分法的时候,输出-1.否则,输出能分出的最大的集合个数. 具体思路:求出这n个数的线性基就完事了,对于-1的情况,就是这n个值得异或值是0,这个时候无论你怎么分都是不管用的,其他情况直接输出线性基就可以了. 线性基的定义: 对…
A. Minimum Integer 链接:http://codeforces.com/contest/1101/problem/A 代码: #include<bits/stdc++.h> using namespace std; #define ll long long int main() { int n,x,y,d; cin >> n; ;i <= n;i ++){ cin>>x>>y>>d; if(x > d) cout<…
D. GCD Counting 题意: 给出n个点的树,每个点有一个权值,找出一条最长的路径使得路径上所有的点的gcd>1 题解: gcd>1的一定不会有很多.所以暴力搞一下就行,不需要点分治. #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <map> using namespace std; ; *maxn…
目录 Educational Codeforces Round 58 (Rated for Div. 2) A. Minimum Integer B. Accordion C. Division and Union D.GCD Counting E.Polycarp's New Job F.Trucks and Cities G.(Zero XOR Subset)-less A,B,C,D,E都是几个月前写的..现在终于把这个坑填上了qwwwwq Educational Codeforces R…