序列的异或【异或运算的特点】

xiaoxiao2021-02-28  48

序列的异或 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit

Status Description 定义序列(a b c)的异或值Xor(a b c) = a ^ b ^ c。

给定一个序列n,问你该序列中所有子序列的异或值 相异或后的结果。

如:序列有 a b c 三个元素,则它的子序列共有6个——(a) (b) (c) (a b) (a c) (b c) (a b c)

最后的结果就是

Xor(a) ^ Xor(b) ^ Xor(c) ^ Xor(a b) ^ Xor(a c) ^ Xor(b c) ^ Xor(a b c)

Input 第一行输入一个整数 T ,代表有T组测试数据( T<=100

每组数据占两行,第一行有一个整数 n 代表元素个数,下一行有n个整数代表 n 个元素。

保证1<=n<=5001<=序列元素 <=107 <script type="math/tex" id="MathJax-Element-352"><= 10^7</script>。

Output 输出一个整数代表最后的结果。

Sample Input 2 3 2 3 4 1 8 ` Sample Output 0 8 思路 : 偶数个相同的数字相互^,结果为0 ,奇数个相同数字相^, 结果为这个数字。。 代码

#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #include<queue> #include<stack> #include<map> #include<vector> #include<set> #define CLR(a,b) memset((a),(b),sizeof(a)) #define inf 0x3f3f3f3f #define mod 100009 #define LL long long #define M 10000 #define ll o<<1 #define rr o<<1|1 #define lson o<<1,l,mid #define rson o<<1|1,mid+1,r using namespace std; void read(int &x){ x=0;char c; while((c=getchar())<'0'); do x=x*10+c-'0';while((c=getchar())>='0'); } int main() { int t;scanf("%d",&t); while(t--) { int n; scanf("%d",&n);int a[M]; for(int i=0;i<n;i++) scanf("%d",&a[i]); if(n>1) printf("0\n"); else printf("%d\n",a[0]); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-80294.html

最新回复(0)