题解 2665: 蓝桥杯2022年第十三届省赛真题-选数异或

来看看其他人写的题解吧!要先自己动手做才会有提高哦! 
返回题目 | 我来写题解

筛选

二分+哈希表

解题思路:利用哈希表存储数据的位置,然后利用二分法减少时间复杂度,空间换时间。注意事项:注意数据的存储结构参考代码:importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerscan=newScanner(S

蓝桥杯2022年第十三届省赛真题-选数异或

解题思路:输入所需数据,分别用两组数组存储数列和检查值。check方法的逻辑是:创建一个HashSet对象set,遍历数组a的指定范围[l,r],对于每个元素a[i],检查set中是否已经存在一个元素与a[i]异或后等于x。如果存在,则返回true;否则,将a[i]添加到set中。

关于选数异或问题的几种解答及相关讨论。

解题思路:关于此题,没来没当回事,所以使用了比较暴力的做法。然后经历了空间超限、时间超限等问题,下面是三种解法。注意事项:参考代码:/*第一份代码,此份代码思维简单粗暴,但空间超限仅为只过了两份数据,但时间消耗小*/#include#includeusingname

离线 + 哈希

解题思路:该题没有涉及修改操作,多次查询,离线一定有机会优化出比在线更好的算法我们对查询的边界【l,r】中的r从左到右解决问题发现l肯定是越小越有机会yes,我们现在要解决的就是这个边界值l_bound让所有左边的都yes,反之no这个左边界l_bound怎么处理呢我们可以维护一个A数组值到下标的一个

选数异或(暴力lite详解版)简介版->https://blog.dotcpp.com/a/95337

解题思路:因为x是固定值,所以每次比较读入的区间[l,r]与之前满足条件的区间,如果本次读入的区间的左端小于等于而且右端大于等于某一个已经保存的区间,那么这个区间内至少存在那个已经保存的区间满足条件。如果都不满足则进行循环判断。注意事项:#include#include

蓝桥杯2022年第十三届省赛真题-选数异或

解题思路:每计算出来一对数相异或等于x时,将其下标存在pair数组中,下次输入区间时,首先匹配若数组中每对下标在此区间内,则其内存在两数异或等于x,可直接输出yes,省去继续判断的过程。注意事项:注意超时。参考代码:#include#include#include<

动态规划,清晰代码

摘要:解题思路:注意事项:参考代码:#include <iostream> #include <unordered_map> int main() {     int n, m ,x;     s……