概述
题目链接:[蓝桥杯 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] 选数异或所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复