CF1163E】的更多相关文章

CF1163E 首先存在p的要求是能建一个满的线性基而且线性基用到的数不能大于等于\(2^x\) 这很好解决,只要把所有数排序后从小到大的插进线性基,然后每次删掉所有原数大于\(2^x\)的数并调整x 至于输出p,由于能插进线性基里的数都是线性不相关的,随便输出一下就行 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;…
虽然做起来有一点裸……但是就是想不到啊…… 首先令 $d_i=p_i\oplus p_{i-1}$,那么 $d_i$ 都是 $S$ 中的数,$a_i=d_i\oplus d_{i-1}\oplus \cdots\oplus d_2$.也就是每个数都能被表示成 $S$ 的某个子集的异或和. 要用 $S$ 表示出 $1$ 到 $2^x-1$ 的所有数(不用考虑 $0$,因为每个数是可以重复用的,可以 $S_i\oplus S_i=0$).怎么求出最大的 $x$? 其实就是建出线性基,然后最小的没有数…
题目描述:输入一个大小为\(n\)的正整数集合\(S\),求最大的\(x\),使得能构造一个\(0\)到\(2^x-1\)的排列\(p\),满足\(p_i\oplus p_{i+1}\in S\) 数据范围:\(n,S_i\le 2^{18}\) 什么?NTF在很多年前就把这东西给切了? 首先要把\(S\)缩成一个大小为\(x\)的线性无关组,而且每个数\(<2^x\),这样就可以构造出\(p\)了.(之后再说) 直接丢进线性基里就可以了吗?不行,应该是把\(<2^x\)的数全部加进去之后,看…
题意:给定集合,求一个最大的x,使得存在一个0 ~ 2x - 1的排列,满足每相邻的两个数的异或值都在S中出现过.Si <= 2e5 解:若有a,b,c,令S1 = a ^ b, S2 = b ^ c,则有a ^ c = S1 ^ S2 因为有0存在,所以每个数都能表示成它到0路径上的所有间隔的异或和,也就是每个数都能被表示出来.我们用线性基来判断. 找到最大的x之后,我们可以发现,线性基中x个数的2x种选法一一对应这2x个数.于是直接采用格雷码来找这个排列,每加一位,就在x个数中添加 / 删除…
CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(asuldb\)排名比窝和慎老师还高,然后还嘲讽窝掉rating?? 他合格考稳了 CF1179D CF280C 期望 CF914D CF1041C CF1197E 码力约等于-inf CF1217D 如果\(x>y\)则标红否则标蓝毕竟一个环不可能单调不降 CF322F 拉格朗日插值 CF1215D…