首页 > 其他 > 详细

xor序列

时间:2020-07-23 15:25:49      阅读:73      评论:0      收藏:0      [点我收藏+]

题目描述 

小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y
 

输入描述:

第一行为一个整数n,表示元素个数
第二行一行包含n个整数,分别代表序列中的元素
第三行为一个整数Q,表示询问次数
接下来Q行,每行两个数x,y,含义如题所示

输出描述:

输出Q行,若x可以变换为y,输出“YES”,否则输出“NO”

输入

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

输出

YES
YES
NO

说明

对于(6,7)来说,6可以先和3异或,再和2异或
对于(2,1)来说,2可以和3异或
对于(3,8)来说,3不论如何都不能变换为8

备注:

对于100%的数据,n,Q<=105
保证所有运算均在int范围内
// x ^ z = y   z = x ^ y
// 线性基模板题
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 32;
int num[MAXN];
int insert(int x) {
    for (int i = 31; i >= 0; i--) {
        if ((x >> i) & 1) {
            if (!num[i]) {
                num[i] = x;
                return 1;
            }
            x ^= num[i];
        }
    }
    return 0;
}
bool query(int x) {
    for (int i = 31; i >= 0; i--) {
        if (((x >> i) & 1) && num[i]) x ^= num[i]; 
    }
    return !x;
}
int main() {
    int n, x, y, q;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x; insert(x);
    }
    cin >> q;
    while (q--) {
        cin >> x >> y;
        cout << (query(x ^ y) ? "YES" : "NO") << endl;
    }
    return 0;
}

xor序列

原文:https://www.cnblogs.com/HighLights/p/13364360.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!