首页 > 其他分享 >好玩的数据结构qwq

好玩的数据结构qwq

时间:2024-07-29 11:29:21浏览次数:6  
标签:le 那么 oplus 数据结构 好玩 我们 qwq

从2024.7.29开始记录。代码不放可能是因为我没写。

1. P7470 [NOI Online 2021 提高组] 岛屿探险

先考虑 \(b_i > d_j\) 的情况。那么答案就是 \(\sum [a_i \oplus c_j \le d_j]\)。我们把 \(a_i\) 插入 \(01 \text{trie}\) 中。然后我们从上往下走,走到深度为 \(h\) 的节点,那么代表他的值等于 \(c_i \oplus d_j\) 的前 \(h\) 位。然后我们考虑第 \(h + 1\) 位。

  • \(d_i = 0\),那么 \(a_i\) 和 \(c_j\) 的第 \(h + 1\) 位必须相等,否则 \(a_i \oplus c_j > d_j\),然后直接往这个方向走即可。

  • \(d_i = 1\),那么此时 \(a_i\) 和 \(c_j\) 的第 \(h + 1\) 位任意取都行。那么就有两种可能:

    • 如果 \(a_i\) 和 \(c_j\) 的第 \(h + 1\) 位不一样,那么此时 \(a_i\) 依然等于 \(c_j \oplus d_j\),所以我们向这个方向继续走即可。
    • 如果 \(a_i\) 和 \(c_j\) 的第 \(h + 1\) 位一样,那么此时 \(a_i \oplus c_j\) 就会一定小于 \(d_j\) 了,那么对于答案的贡献就是这个字数里 \(a_i\) 的个数之和。

这一部分就是 CF817E。比较简单。

接下来我们考虑 \(b_i \le d_j\) 的情况。这一个部分比较困难。但是我们发现这一个部分和 \(a_i \oplus c_j \le d_j\) 的结构很像,所以我们可以考虑类似的操作。

标签:le,那么,oplus,数据结构,好玩,我们,qwq
From: https://www.cnblogs.com/Carousel/p/18329721

相关文章

  • 【数据结构】排序算法
    目录排序冒泡排序选择排序直接插入排序希尔排序堆排序归并排序快速排序排序排序的概念:假设含有n个记录的序列为{R1,R2,R3,···,Rn},其相应的关键字分别为{K1,K2,K3,···Kn},需确定1,2,3,···,n的一种排列P1,P2,···,Pn,使其相应的关键字满足Kp1<=Kp2<=K......
  • 山东大学数据结构与算法实验13最小生成树(Prim算法/Kruskal算法)
    A : Prim算法题目描述使用prim算法实现最小生成树输入输出格式输入第一行两个整数n,e。n(1≤n≤200000)代表图中点的个数,e(0≤m≤500000)代表边的个数。接下来e行,每行代表一条边:ijw 表示顶点i和顶点j之间有一条权重为w的边输出最小生成树所有边的......
  • 最细哈希表相关的力扣题和讲解和Java、C++常用的数据结构(哈希法)来源于代码随想录,十分
    20240725一、什么时候适用什么样的结构。1.java中1.1HashSet:1.2TreeSet:1.3LinkedHashSet:1.4HashMap:1.5TreeMap:1.6LinkedHashMap:1.7总结2.c++中2.1std::unordered_set:2.2std::set:2.3std::multiset:2.4std::unordered_map:2.5std::map:2.6std::multimap:3代码......
  • 浅谈简单的数据结构1(树状数组 、线段树)(c++)
    *_*课间休息后的知识点轰炸树状数组引入给定长为n的序列a,q次操作,每次查询一段区间的和,或修改一个数的权值。1≤n,q≤5×10^5,0≤a_i≤10^9。分析如果没有修改操作,这是一道非常简单的前缀和题。假如我们修改前缀和数组,查询就还是O(1)的,是否可行呢?当然不行。考虑......
  • 408 数据结构线性表算法
    第一章线性表定义:线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列。线性表的表示:若用L命名,表示:L=(a1,a2,a3,a4,a5,……,an)线性表的逻辑特性:a1:唯一的表头元素an:唯一的表尾元素除去a1:每个元素有且仅有一个直接前驱除去an:每个元素有且仅有一个直接后继......
  • 408数据结构树算法
    第四章树4.1二叉树的顺序存储#defineMAXSIZE16typedefintElemType;typedefstruct{ ElemTypedata[MAXSIZE]; intsize;}Tree;//初始化二叉树voidinitTree(Tree&T){ for(inti=0;i<MAXSIZE;i++){ T.data[i]=0; //假设0表示空节点 } T.size=0......
  • 408 数据结构图算法
    第五章图5.1图的邻接矩阵存储//无向图的邻接矩阵存储#defineMAXSIZE16 //图的最大顶点个数typedefintVertexType; //顶点类型typedefintEdgeType; //边类型typedefstruct{ VertexTypeVex[MAXSIZE]; //图的顶点集 EdgeTypeEdge[MAXSIZE][MAXSIZE]; //图的边......
  • 408 数据结构排序算法
    第六章排序6.1冒泡排序voidswap(intarr[],inti,intj){ inttemp=arr[i]; arr[i]=arr[j]; arr[j]=temp;}//外层循环是说明n个元素排好序需要经过n-1轮 for(inti=n-1;i>0;i--){ boolflag=true; for(intj=0;j<i;j++){ if(arr[......
  • 408 数据结构查找算法
    第7章查找7.1二分查找需求:在有序数组arr中,查找值为target的元素。若找到返回索引下标,否则返回-1算法思路:找中间值,1.如果target<中间值,在左半区间继续查找,即让high=mid-1​ 2.如果中间值<target,在右半区间继续查找,即让low=mid+1​ 3.直到当lo......
  • 408 数据结构栈算法
    第二章栈2.1顺序栈顺序栈的基本操作#defineMAXSIZE128typedefintElemType;typedefstruct{ ElemTypedata[MAXSIZE]; //用数组实现对栈中元素的存取 inttop; //栈顶指针 intlength; //栈的长度}SqStack;//初始化栈voidinitStack(SqStack&S);//判......