首页 >
头像 小男娘
发表于 2025-12-23 00:15:19
吸收律:于是可以得到,故答案为所有数的异或和 #include <iostream> using namespace std; int n; void Solve() { int res = false; cin >> n; int a; 展开全文
头像 此在Dasein
发表于 2025-12-23 02:23:56
原始问题要求计算如下表达式的值: 直接模拟上述过程需要两层嵌套循环,时间复杂度为 。鉴于 ,平方级算法会导致超时(运算量可达 级别)。因此,必须在数学层面进行简化。 逻辑推导 让我们聚焦于内层循环计算的临时变量 : 其中 表示按位或(OR), 表示按位与(AND)。 利用布尔代数的 吸收律( 展开全文
头像 周康禧
发表于 2025-12-23 11:01:04
因为第二层循环一定会有a[i]&a[i],每次tp算出来的就是a[i],OR取并集的结果就是本身,所以就是求一下这n个数XOR的结果就可以了 void solve(){ int n; cin>>n; int a[n+1]; int ans=0; 展开全文
头像 Jakeap
发表于 2025-12-23 11:41:46
这是一道数学题,看懂题目给的式子很重要以题目举例的式子为例:[(a1&a1)|(a1&a2)^(a2&a1)|(a2&a2)]首先理解与运算和或运算与运算可以理解为取交集,也就是两个数二进制每位共有的为1或者都没有为1,只有一方有就为0或运算可以理解为取并集,与就是两 展开全文
头像 BaiJay
发表于 2025-12-23 08:49:22
通过计算可知,因为每一个数字都需要与所有的数字进行按位与然后再按位或,所以时间复杂度在n2以上,这就导致模拟做法一定会超时,所以我们来寻找数学规律 ; 观察到,因为按位与是保留两个数字二进制都为1 , 所以一个数字和另外一个数字的按位与其实是他们共同拥有的1,但是由于开始的按位与它自己,所以 展开全文
头像 YunBaichuan
发表于 2025-12-23 09:51:35
思路:我们首先要知道&的性质,简单说来就是&操作过后,结果不会变得更大。那么根据题目中的式子,我们可以大胆推测:对于每个将被的式子,比如:来说,其结果应该就是。那么其他将被的式子结果就应该是,因此最终结果就应该是所有元素的异或和 代码: import sys from functoo 展开全文
头像 quchen666
发表于 2025-12-23 12:37:03
#include <bits/stdc++.h> using namespace std ; typedef long long ll; const int N = 3e5+10; ll a[N]; void solve() { int n; cin>>n; 展开全文
头像 吐雾兔
发表于 2025-12-23 14:28:05
from functools import reduce for _ in range(int(input())): a=0 n=int(input()) b=list(map(int,input().split())) print(reduce(lambda x, 展开全文
头像 吐雾兔
发表于 2025-12-23 14:29:59
from functools import reduce for _ in range(int(input())): input() b=list(map(int,input().split())) print(reduce(lambda x, y: x ^ y, b, 0) 展开全文
头像 ac不瓦
发表于 2025-12-23 17:20:55
#include <bits/stdc++.h> using namespace std; void solve() { int n; cin>>n; int fir; cin>>fir; int ans=fir; 展开全文