首页 > 小苯的序列合并
头像 kilomatutinal
发表于 2026-02-11 01:06:42
这道题好难喵~猫猫想了好——长时间才想出来喵!先说结论喵!无论我们怎么合并数组,最终能得到的最大的按位与值,其实只可能是两种情况的其中一种哦:1. 整个数组的异或和(就是不合并,直接算所有数字异或的结果喵~)2. 某个位置分成两段后的“前缀异或”和“后缀异或”的按位与(就是把数组切成两半,然后分别算 展开全文
头像 Lambda_L
发表于 2026-02-11 00:50:59
最终答案一定是某个前缀异或和与对应后缀异或和的按位与。预处理前缀异或数组后,枚举所有分割点,计算 pre[i] & (pre[n]^pre[i]),再与整个数组异或和取最大值,即为答案。时间复杂度 O(n)。代码自己写
头像 YunBaichuan
发表于 2026-02-11 09:33:29
思路:思维题。开始我题没读明白,以为是用线性基来做,而这题其实是利用&运算的性质来做。一般的,越多数字进行&操作,其结果只会不变,或者越来越小 因此要得到最大&值,我们有两种情况可以讨论:1.先用异或把所有数字给异或起来,最终得到只有一个数字,他可能是最大了;2.用异或把前半 展开全文
头像 为芙宁娜献出心脏
发表于 2026-02-11 17:47:22
这道题我们需要用分段的思路来进行思考 我们是不是会首先进行异或,然后再进行和运算,并且异或运算是相邻进行的,所以我们可以看作是有若干个异或段的结果进行和运算 对于最大的结果ans来讲,如果要让和运算得到这个ans,那么ans里面是1的位置这些段都会有1 所以如果我有奇数个段的话,那么就相当于一段,因 展开全文
头像 此在Dasein
发表于 2026-02-11 06:07:29
序列合并最大 AND 值问题分析 1. 问题分析 目标:给定序列 ,通过任意次“相邻异或合并”操作,使得最终序列所有元素的按位与(AND)值最大。 核心运算性质: 合并操作:两个数合并变为异或和。由于异或结合律, 合并后的结果等于该区间的异或和 。 最终形态:操作结束后的序列实际上是将原序列切分成 展开全文
头像 FoolBlade
发表于 2026-02-11 09:42:39
void solve(){ int n;cin>>n; vector<int> a(n+1); for(int i=1;i<=n;i++)cin>>a[i]; int xor_sum=0; for(int i=1;i& 展开全文
头像 Levi_yxc
发表于 2026-02-11 15:02:38
题意可转化为:把 分成 个连续子数组,第 个子数组的异或和为 ,要求最大化 ,其中 表示按位与。 设某种分割得到的答案为 记 表示非负整数 二进制表示中是 1 的位的集合。由按位与的性质有: 下面讨论 。 情况一: 为奇数 令整段异或为 由于分段只是把整段异或拆开再异或回去, 展开全文
头像 怎么不AC啊
发表于 2026-02-17 13:25:50
本题核心在于 因此,答案若分为奇数个段(段内取异或,段间取按位与),那么计算结果为1的位置都可以由上述等式改为异或运算,计算结果为0的位置改为异或后结果可能更大。因此,只弄成一个段取异或是奇数情况的最优解。 若分为偶数个段,讨论是类似的,由于偶数个1的异或为0,不能全部改成异或。但是可以将个段的按 展开全文