没想到xor居然和线性代数有着那么有趣的联系哎
n个数可以转化为一个上三角矩阵 (线性无关?!)
链接:https://www.nowcoder.com/acm/contest/180/D
来源:牛客网
题目描述
小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y
输入描述:
第一行为一个整数n,表示元素个数
第二行一行包含n个整数,分别代表序列中的元素
第三行为一个整数Q,表示询问次数
接下来Q行,每行两个数x,y,含义如题所示
输出描述:
输出Q行,若x可以变换为y,输出“YES”,否则输出“NO”
示例1
输出
复制YES YES NO
1 #include <bits/stdc++.h> 2 #define N 30 3 using namespace std; 4 int b[N+5]; 5 int n; 6 int main () 7 { 8 scanf ("%d",&n); 9 for (int i=1;i<=n;i++) { 10 int x; scanf ("%d",&x); 11 for (int j=N;j>=0;j--) 12 if ((1<<j)&x) { 13 if (!b[j]) { 14 b[j]=x; 15 break; 16 } 17 else x^=b[j]; 18 } 19 } 20 int Q; scanf ("%d",&Q); 21 while (Q--) { 22 int x,y; scanf ("%d %d",&x,&y); 23 x=x^y; 24 for (int i=N;i>=0;i--) { 25 if ((1<<i)&x) 26 x^=b[i]; 27 } 28 if (x) printf("NO "); 29 else printf("YES "); 30 } 31 return 0; 32 }