我是靠谱客的博主 调皮小猫咪,最近开发中收集的这篇文章主要介绍P8773 [蓝桥杯 2022 省 A] 选数异或,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目链接:[蓝桥杯 2022 省 A] 选数异或 - 洛谷

思路:

维护数组f和数组g

f [ i ] : 数字 i 出现的位置(下标 )

g[ i ] : 第i个数最近的一个位置,使得在g[i]~i之间,存在一对数异或值为x

解释:

由于a^b=x  -> b = a^x;

若b在前面出现过,那么f[b]就为数字b的位置下标,即包含 f[b]~当前位置 的区间都是符合条件的区间。若b未出现过,则f[b]为默认值0,即不存在这样数对,使a^b=x。

代码:

#include<iostream>
using namespace std;

const int N = 100005;
const int M = (1 << 20) +10;

int g[N];
int f[M];
int a,b,x;
int n,m,l,r;

int main()
{
    cin>>n>>m>>x;
    for(int i=1;i<=n;++i)
    {
        cin>>a;
        g[i]=max(g[i-1],f[a^x]);
        f[a]=i;
    }

    for(int i=1;i<=m;++i)
    {
        cin>>l>>r;
        if(g[r]>=l) cout<<"yes"<<endl;
        else cout<<"no"<<endl;
    }

    return 0;
}

最后

以上就是调皮小猫咪为你收集整理的P8773 [蓝桥杯 2022 省 A] 选数异或的全部内容,希望文章能够帮你解决P8773 [蓝桥杯 2022 省 A] 选数异或所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部