首页 > Perfect Security
头像 子希
发表于 2020-10-29 18:50:14
题目大意:给你两个序列a,b,要你从b中找一个排列,使得bi oxr ai 最小,并且字典序最小。思路:先把要排列的b插入字典树中去,然后枚举a,一个一个去贪心的找最小值就行了。每次找的都是最小的xor值就保证了字典序最小。因为每个数只能被找一次,所以这个题难度在于,从字典树找最小异或值,并且每个数 展开全文
头像 lifehappy
发表于 2020-10-26 20:06:27
Perfect Security 思路 只要把P数组加入树就好了,然后通过这颗树对A中的每一个数,去查找一个与之异或最小的值即可,同时还要支持删除操作,直接加入一个数组,记录当前是否还有数字经过这条边即可。注意在查询的过程中要不断的减小数组的标记。 代码 /* Author : lifeha 展开全文
头像 熠丶
发表于 2020-10-24 17:14:09
做法:01字典树+贪心 题意: 有长度为n的两个a,b数组,改变b中元素的顺序,使数组c (c[i]=a[i]^b[i])的字典序最小,并输出数组c 思路: 这题思路和前两题很相似,唯一不同点是求最小而已 每次a[i]上异或上一个b数组中任意元素(不能重复使用),使得c[i]最小即可 记录每个节点 展开全文
头像 又在摸鱼的大熊猫很勤奋努力
发表于 2020-10-25 09:33:26
Perfect Security 题目大意 你有两串长度为 的序列,让你对第二串数排列一下,使得这两串数对应的数的异或序列字典序最小(一个数作为一个关键字,而不是一个数的每一位都是关键字) 分析 考虑贪心,让 和最优的 匹配,然后删掉与 匹配的 ,然后去匹配 ,直到 正确性显然,就不用再证明 展开全文
头像 issue是云哥的小迷×呀
发表于 2020-10-27 19:32:56
就把p加入字典树 然后删除..... 写法和上一题差不多,所以不说了.... #include <bits/stdc++.h> using namespace std; const int maxn=6e6+10; int n,m,zi[maxn][3],id,isok[maxn],cn 展开全文
头像 DeNeRATe
发表于 2020-11-02 13:30:42
分析 由于我们需要得到字典序最小的生成序列所以我们考虑贪心对可以随机选取的数组进行构造01Trie树进而我们遍历数组A[]每次贪心往小的点走找到之后我们删除它那么我们再写一个Delete()函数即可时间复杂度: 代码 //CF923C #include <algorithm> #incl 展开全文
头像 林思艺
发表于 2020-10-25 20:22:46
题意 给你两个序列 ,让你求的一种排列,使得得到的序列字典序最小 思路 贪心的选择与匹配,使得最优。我们将,拆分后 , 贪心就可以方便地进行。枚举两串上,每一位上的数尽量使各位相异或后为即可选择出最合适的 。 实现 还是要用到我们的树来实现。先建立一棵基于 的二进制数的字典树,并记录各节点代表的元素 展开全文
头像 Dear㉿You
发表于 2020-11-03 19:42:04
Perfect Security 题意 给出一个n,两个长度为n的数组(分别记为 a , p ),问如何排列p数组使得a [ i ] ^ p [ i ]的 最后的结果排列字典序最小 分析 贪心的想,因为要结果排列字典序最小,那第一个结果得最小,第二个类似....那就可以对每一个a [ i ] 展开全文
头像 rk_no
发表于 2020-10-23 10:45:58
题目: 给个数,和个数。让你确定一个排列,使得序列。字典序最小。 做法: 其实是个贪心,每次从中剩下的数中选一个数,使最小,然后中删去。最后得到的序列就是答案了。所以重点是字典树的删除操作该怎么写。我的做法是,每个叶子记录一个,代表这个数的数量。每次删去一个数时,对应叶子结点的,如果变为,则删去该 展开全文
头像 昵称很长很长真是太好了
发表于 2020-10-30 23:22:51
题意:第一行给你一个n第二行给你n个数字 分别是a[1],a[2].....a[n]。第三行给你n个数字 分别是b[1],b[2].....b[n]。 问:第三行的序列可自由排列,要求排列之后的顺序 a[1]^b[1],a[2]^b[2]...a[n]^b[n]的字典序最小。 题解:因为b数组可以 展开全文

等你来战

查看全部