专题--XOR之线性基

   没想到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

输入

复制
5
1 2 3 4 5
3
6 7 
2 1
3 8

输出

复制
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\n");
29         else   printf("YES\n");
30     }
31     return 0;
32 }

猜你喜欢

转载自www.cnblogs.com/xidian-mao/p/9688111.html