选数异或-acwing每日一题

news/2024/11/7 16:51:00/

项目场景:

较难的dp+哈希 思维题


问题描述

给定一个长度为 n 的数列 A1,A2,···,An 和一个非负整数 x,给定 m 次查询,每次询问能否从某个区间 [l,r] 中选择两个数使得他们的异或等于 x。

输入格式

输入的第一行包含三个整数n,m,x。

第二行包含 n 个整数 A1,A2,···,An。

接下来 m 行,每行包含两个整数 li,rili,ri 表示询问区间 [li,ri][li,ri]。

输出格式

对于每个询问,如果该区间内存在两个数的异或为 x 则输出 yes,否则输出 no

数据范围

对于 20% 的评测用例,1≤n,m≤100;
对于 40% 的评测用例,1≤n,m≤1000;
对于所有评测用例,1≤n,m≤100000,0≤x<220,1≤li≤ri≤n,0≤Ai<220。

输入样例:

4 4 1
1 2 3 4
1 4
1 2
2 3
3 3

输出样例:

yes
no
yes
no

样例解释

显然整个数列中只有 2,3 的异或为 1。


原因分析:

题目是在指定的一段区间内判断区间内是否存在一个数与指定的数异或的值为x

考虑dp f[i] 存储的为与a[i]异或的数的下标值 区间为[l,r]  l<=i<=r l<=f[i]<i<=r 要满足题目要求 则判断f[r]与l的关系即可 只要保证f[r]>=l 则一定存在匹配 具体见代码

 


实现代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N = 1e6+10;
int f[110];
int a[N];
int n,m,x;
unordered_map<int,int> last;int main(){//读入数据部分cin>>n>>m>>x;for(int i=1;i<=n;i++) cin>>a[i];//进行dp//这里的f[i] 表示与a[i]匹配的最近的数的下标//last[a[i]^x] 表示与a[i]匹配的数最后一次出现的下标for(int i=1;i<=n;i++){f[i] = max(f[i-1],last[a[i]^x]);last[a[i]] = i;}while(m--){int l,r;cin>>l>>r;//只需要区间的右端点对应的f[i]存储的下标大于左端点 则说明在指定区间内存在一个数能够与给定数匹配if(f[r]>=l) cout<<"yes"<<endl;else cout<<"no"<<endl;}return 0;
}


http://www.ppmy.cn/news/9090.html

相关文章

【ARMv8 SIMD和浮点指令编程】Libyuv I420 转 ARGB 流程分析

Libyuv 可以说是做图形图像相关从业者绕不开的一个常用库&#xff0c;它使用了单指令多数据流提升性能。以 ARM 处理为主线&#xff0c;通过 I420 转 ARGB 流程来分析它是如何流转的。 Libyuv 是一个开源项目&#xff0c;包括 YUV 的缩放和转换功能。 使用邻近、双线性或 box…

第六章 实二次型

实二次型 6.1二次型 的定义及其矩阵表示 1.二次型的概念 n个变量x1,x2,...,xnx_1,x_2,...,x_nx1​,x2​,...,xn​的二次齐次多项式 f(x1,x2,...,xn)a11x122a12x1x2....2a1nx1xna22x22...2a2nx2xn.......annxn2f(x_1,x_2,...,x_n)a_{11}x^2_12a_{12}x_1x_2....2a_{1n}x_1x_na…

Mysql卸载以及安装

1.卸载mysql &#xff08;1&#xff09;查找以前是否有安装 命令&#xff1a;rpm -qa | grep mysql 如果之前安装过&#xff0c;那么可以看到有一个包&#xff1a; mysql-libs-5.1.66-2.el6_3.x86_64 &#xff08;2&#xff09;删除mysql 删除命令&#xff1a;rpm -e --nod…

【C++修炼之路】12. stack queue类

每一个不曾起舞的日子都是对生命的辜负 stack&&queue一. stack的介绍和使用1. stack的介绍2. stack的使用二. stack的模拟实现三. queue的介绍和使用1. queue的介绍2. queue的使用四. queue的模拟实现五. deque的介绍和使用1. deque的介绍2. deque的使用3. deque的缺陷…

【Node】Node.js安装与配置(详细步骤)

Node.js安装与配置&#xff08;详细步骤&#xff09;一、安装Node.js1.1 下载1.2 安装1.3 环境变量二、验证是否安装成功三、修改模块下载位置3.1 查看npm默认存放位置3.2 在 nodejs 安装目录下&#xff0c;创建 “node_global” 和 “node_cache” 两个文件夹3.3 修改默认文件…

MySQL调优-Explain详解和索引最佳实践

目录 MySQL调优-Explain详解和索引最佳实践 Explain工具介绍 Explain分析示例 explain 两个变种 explain中的列 1.id列 2.select_type列 3. table列 4.type列 5. possible_keys列 6. key列 7. key_len列 8. ref列 9. rows列 10.Extra列 索引最佳实践 1.全值匹配 …

Maven安装及配置

1.下载 Maven – Download Apache Maven 2.安装 maven压缩包解压到一个没有中文&#xff0c;空格或其他特殊字符的文件夹内即可使用。 3.配置环境变量 1.右键此电脑->属性->高级系统设置->环境变量 2.新建系统变量MAVEN_HOME 3.编辑系统变量Path&#xff0c;添…

设计模式第3式:策略模式

前言 策略模式定义了算法族&#xff0c;分别封装起来&#xff0c;让它们之间可以相互替换&#xff0c;此模式让算法的变化独立于使用算法的客户。 正文 《head first设计模式》给的例子很好&#xff0c;它通过改造了一个Duck功能&#xff0c;将“行为”抽象成接口&#xff0…